Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Preg匹配导致错误的简单数学公式_Php_Regex_Math_Preg Match - Fatal编程技术网

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段-但是,除非更改分隔符,否则需要转义字符类中的
/