Php 正则表达式至少匹配一个符号和两个数字
我正在尝试编写一个正则表达式,用于PHP中的if语句,以检查字符串是否包含至少1+、-、*、或/和至少2个数字。它们之间可以有任意数量的空格 最好的方法是什么 我试着写一个正则表达式,如下所示,但这似乎与我的测试用例不匹配 我使用的正则表达式是:Php 正则表达式至少匹配一个符号和两个数字,php,regex,math,Php,Regex,Math,我正在尝试编写一个正则表达式,用于PHP中的if语句,以检查字符串是否包含至少1+、-、*、或/和至少2个数字。它们之间可以有任意数量的空格 最好的方法是什么 我试着写一个正则表达式,如下所示,但这似乎与我的测试用例不匹配 我使用的正则表达式是:m/[0-9]{2,}[=-*/]+/ 以下是一些可以通过的测试用例: 2+2 5*3 6-8 我的最终目标是用PHP构建一个计算器,现在我正在尝试确定哪些输入是有效的数学输入/有效的数学表达式,哪些不是。这将匹配您的测试 /^ [0-9]+ #
m/[0-9]{2,}[=-*/]+/
以下是一些可以通过的测试用例:
我的最终目标是用PHP构建一个计算器,现在我正在尝试确定哪些输入是有效的数学输入/有效的数学表达式,哪些不是。这将匹配您的测试
/^
[0-9]+ # first number
\s* # any whitespace
[+*\/-] # operand
\s* # any whitespace
[0-9]+ # second number
$/x
<>你的正则表达式永远不会匹配单数,因为你使用的是代码>{ 2,} /COD>这意味着匹配一个字符2次或更多次。
:分隔符#
:将一个数字匹配一次或多次,然后将其分组(\d+)
:将空格匹配零次或多次\s*
:将([+/*-])
或+
或-
或*
匹配一次并将其分组/
:将空格匹配零次或多次\s*
:将一个数字匹配一次或多次,然后将其分组(\d+)
:分隔符#
2 + 2 = 4
5 * 3 = 15
6 - 8 = -2
建议:对于负数、括号、log和cos/sin函数,这将变得相当复杂,因此最好使用解析器。Lex it而不是尝试regexp hacks。我强烈建议使用类似的方法。请注意,在字符类中不需要转义
+*/
,但是你需要逃离<代码> ->代码>如果它在字符类的中间,否则它将指定一个范围!例如,8、5将得到匹配,因为根据。因此,如果使用[+*/-]
,则不需要转义-
,但请稍候,如果斜杠用作,则确实需要转义。@HamZa:Warning:preg_match():未知修饰符'-';)你要逃过这一劫吗dash@HamZa:很抱歉,这是由于之前的`before
/`非常感谢您的解释和帮助!这帮了大忙。我在哪里可以找到PHP的数学解析器?@JayGatz抱歉,我不知道我尝试过的任何语法分析器,你也许应该搜索一个并尝试一下。另外,请谨慎使用eval()的解决方案,测试它们,因为它们可能有一些安全问题。@JayGatz好的,我问过了,下面是内容。
2 + 2 = 4
5 * 3 = 15
6 - 8 = -2