当正确/匹配时,正则表达式if-condition的套件不执行

时间:2013-06-08 20:21:57

标签: php regex

如果在PHP中的字符串中匹配正则表达式,我试图回应一些东西。

当我if(true){//...}套件执行时,但当我执行if(regex){//..}时,它无效。 我的意思是,套件内的回声没有执行。

我做错了什么?

基本上我想要做的是回应一些如果$ query看起来像2 + 2,3 * 5或4.0 / 1.2

以下是有效的方法:

<?php
if(true){
    echo "<div class=\"calc\">Mathematical Operation</div>";
}
?>

即使它应该匹配$ query,也就是2 + 2:

,这就是不起作用
<?php
if(preg_match('/(\d+)(\s)*([+/*-])(\s)*(\d+)/', $query)){
    echo "<div class=\"calc\">Mathematical Operation</div>";
}
?>

3 个答案:

答案 0 :(得分:2)

阅读警告告诉你的内容:

PHP Warning:  preg_match(): Unknown modifier '*' in php shell code on line 1

这意味着在*之前出现了问题。

在这种情况下,它是未转义的分隔符/(您可以从unknown modifier猜测。)

使用:

// ---------------------------v (note the backslash here to escape the delimiter)
if (preg_match('/(\d+)(\s)*([+\/*-])(\s)*(\d+)/', $query)){
    echo "<div class=\"calc\">Mathematical Operation</div>";
}

答案 1 :(得分:1)

要匹配所有示例字符串,例如此4.0 / 1.2,您还需要更改匹配数字的方式以允许浮点数。以下正则表达式将匹配“343.4”等,您当前的正则表达式不会。

if (preg_match('/(\d+(\.\d+)?)\s*([*+\/-])\s*(\d+(\.\d+)?)/',$query)){
    echo "<div class=\"calc\">Mathematical Operation</div>";
}

答案 2 :(得分:0)

试试这个正则表达式模式:

/^\s*[0-9\.]+\s*[\+\-\*\/]\s*[0-9\.]+\s*$/

它应该单独匹配操作,即:

2+2
3* 5
4.0 / 1.2

输入应该是:

$query = "2+2"; //or 3* 5 etc

if(preg_match('/^\s*[0-9\.]+\s*[\+\-\*\/]\s*[0-9\.]+\s*$/', $query)){
    echo "<div class=\"calc\">Mathematical Operation</div>";
}