0

如果正则表达式在 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>";
}
?>
4

3 回答 3

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>";
}
于 2013-06-08T20:24:50.067 回答
1

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

if (preg_match('/(\d+(\.\d+)?)\s*([*+\/-])\s*(\d+(\.\d+)?)/',$query)){
    echo "<div class=\"calc\">Mathematical Operation</div>";
}
于 2013-06-08T20:29:04.420 回答
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>";
}
于 2013-06-08T20:34:34.730 回答