使用#确切的preg_match

时间:2015-03-15 14:51:55

标签: php preg-match

我如何preg_match完全采用这种搜索方式:

  • 我的价值所在:#5#
  • 我的搜索价值:#5#;#9#

我做了一个简单的

if (preg_match("#5#", "#5#;#9#")) { return true; } else { return false; }

并且,它返回true。

该代码存在问题,如果我要比较的值是#51#;#55#,那么返回也是如此,而在这种情况下它必须为假:

if (preg_match("#5#", "#51#;#55#")) { return true; } else { return false; }

同样返回true,而我想要假。

2 个答案:

答案 0 :(得分:0)

preg_match("#5#", "#51#;#55#")返回true,因为preg_match使用#作为分隔符。要匹配#5#,您必须在正则表达式周围添加分隔符:

if (preg_match("/#5#/", "#51#;#55#")) { return true; } else { return false; }

这将返回false。

答案 1 :(得分:0)

如果您只需要在另一个字符串中找到您知道的字符串(#5#),那么最好的方法是使用函数strpos()。如果找不到字符串,则返回布尔值FALSE或者将搜索到的字符串的位置表示为另一个字符串的整数。

任何preg_*()函数都会更快。

$pos = strpos('#5#', '#5#;#9#');
if ($pos !== FALSE) {
    echo('Found (at position '.$pos.')');
} else {
    echo('Not found.');
}

您必须注意比较运算符:使用$pos != FALSE是不够的,因为0 == FALSE。您必须使用===!==进行比较才能避免这种情况。

使用preg_match()

您的方法失败,因为在PHP中,PCRE函数将regex中的第一个字符解释为delimiter

这意味着regex中的#5#为:5。当然,这个regex匹配它在字符串中找到的任何5。要解决此问题,您必须使用某个分隔符(regex通常使用)围绕/

return preg_match('/#5#/', '#5#;#9#');