使用 PHP 匹配数学方程式
Matching for math equations using PHP
我正在尝试为数学方程式编写 preg_match,但由于某些原因,当我 print_r 时,它什么也没有出现。我不确定我做错了什么。
$text = "22/7";
preg_match("~([0-9]+([+\-*x]|(?:plus|add|minus|subtract|divide|time|multiply)(?:es|s)?(?: by)?)(?: )?[0-9]+)(((([+\-*x]|plus|add|minus|subtract|divide|time|multiply)(?:es|s)?(?: by)?)(?: )?([0-9]+))+)?~", $text, $match);
print_r($match);
原始问题
问题是字符组中没有除号:
[+\-*x]
并应改为:
[+*x/-]
增强
进一步研究您的正则表达式后,我想看看是否可以稍微简化它,同时添加功能。我想到了这个:
^((-?\d+(?:\.\d+)?)(?:[*+/^eE-]| (?:to the power of|plus|add|minus|subtract|divided?|times|multipl(?:y|ied))(?: by)?)(?: )?)(?1)*(?2)$
查看 demo
我添加了:
- 浮点数,(
1.58-0.58
)
- 可选减号,(
2*-4
)
- (
2^8
) 的幂
- 科学计数法(
9e100
)
- 递归模式 (
2^8*10-9
)
很高兴您使用 PHP - 使用 PCRE 正则表达式引擎,您可以做一些很酷的事情。
细分:
(-?\d+(?:\.\d+)?)
- 捕获一个可选的减号,然后是一个数字,然后是一个可选的点和更多数字(减号和浮点加法)
[*+/^eE-]
- 该组中的任何字符(科学记数法,加法)
(?:to the power of|plus|add|minus|subtract|divided?|times|multipl(?:y|ied))(?: by)?
- 此中的任何组(已添加 "to the power of")
(?1)*(?2)
- 尽可能多次递归第 1 组的正则表达式(它之前的整个模式),然后递归第 2 组的正则表达式(数字部分),以始终以数字结尾(递归模式)
我正在尝试为数学方程式编写 preg_match,但由于某些原因,当我 print_r 时,它什么也没有出现。我不确定我做错了什么。
$text = "22/7";
preg_match("~([0-9]+([+\-*x]|(?:plus|add|minus|subtract|divide|time|multiply)(?:es|s)?(?: by)?)(?: )?[0-9]+)(((([+\-*x]|plus|add|minus|subtract|divide|time|multiply)(?:es|s)?(?: by)?)(?: )?([0-9]+))+)?~", $text, $match);
print_r($match);
原始问题
问题是字符组中没有除号:
[+\-*x]
并应改为:
[+*x/-]
增强
进一步研究您的正则表达式后,我想看看是否可以稍微简化它,同时添加功能。我想到了这个:
^((-?\d+(?:\.\d+)?)(?:[*+/^eE-]| (?:to the power of|plus|add|minus|subtract|divided?|times|multipl(?:y|ied))(?: by)?)(?: )?)(?1)*(?2)$
查看 demo
我添加了:
- 浮点数,(
1.58-0.58
) - 可选减号,(
2*-4
) - (
2^8
) 的幂
- 科学计数法(
9e100
) - 递归模式 (
2^8*10-9
)
很高兴您使用 PHP - 使用 PCRE 正则表达式引擎,您可以做一些很酷的事情。
细分:
(-?\d+(?:\.\d+)?)
- 捕获一个可选的减号,然后是一个数字,然后是一个可选的点和更多数字(减号和浮点加法)[*+/^eE-]
- 该组中的任何字符(科学记数法,加法)(?:to the power of|plus|add|minus|subtract|divided?|times|multipl(?:y|ied))(?: by)?
- 此中的任何组(已添加 "to the power of")(?1)*(?2)
- 尽可能多次递归第 1 组的正则表达式(它之前的整个模式),然后递归第 2 组的正则表达式(数字部分),以始终以数字结尾(递归模式)