Php Preg匹配导致错误的简单数学公式
由于某种原因,在使用Php Preg匹配导致错误的简单数学公式,php,regex,math,preg-match,Php,Regex,Math,Preg Match,由于某种原因,在使用preg_match('/^[-+*/^()\s0-9]+$/',$formula时,我在尝试运行7+6c时抛出了一个未知修饰符'^',据我所知,我将返回false 完整片段 if (! preg_match('/^[-+*/^()\s0-9]+$/i', $formula )) { $this->log(array('fatal', $formula, 'Contains unacceptable values...')); } $formula = '(
preg_match('/^[-+*/^()\s0-9]+$/',$formula
时,我在尝试运行7+6c
时抛出了一个未知修饰符'^'
,据我所知,我将返回false
完整片段
if (! preg_match('/^[-+*/^()\s0-9]+$/i', $formula ))
{
$this->log(array('fatal', $formula, 'Contains unacceptable values...'));
}
$formula = '(7 + 6) / 9'; # 1
$formula = '7 * 6 ^ 2' # 252
$formula = '1c + 2c' # boom, but no trap =/
根据您的匹配条件,
/^[-+*/^()\s0-9]+$/i
,您将遇到一个错误,因为^
是一个保留字符,表示集合的开头。因此,如果要在正则表达式中匹配它,则需要对其进行转义。即/^[-+*/^()\s0-9]+$/i
但是,-+*
也是保留的,即使在集合中也有特殊的含义,因此这些也需要转义。/^[\-\+\*\/\^()\s0-9]+$/i
好的,根据注释,是的,您是正确的,只需要转义分隔符。但是转义其余的也不会影响表达式,因此答案仍然有效。最小且有效的表达式是
/^[-+*\/^()\s0-9]+$/i
您到底遇到了什么错误?从您发布的错误中,这应该可以解决它,但错误步骤似乎与您显示的代码也不匹配。我希望如果上述条件不匹配,会像上面一样记录错误。我从您的代码中得到的致命错误是preg\u match():未知修饰符“\\”
接受并向上投票,我将分隔符从//替换为~~~Ahh。是的。我正要为它提供一个phpIDLE。另一种不替换分隔符的方法是在您的\^
之前退出//code>。抱歉,我在发布答案时错过了这一点。^^^^实际上是打开的字符类中需要转义的字符中只有一个是第一个-
^
仅具有特殊含义(因此需要转义)如果它是字符类中的第一个字符。+
、*
和/
在字符类中没有特殊意义,不需要转义)。请参见此处文档的第10段-但是,除非更改分隔符,否则需要转义字符类中的/
。