如果在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>";
}
?>
答案 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>";
}