exact preg_match with #


exact preg_match with #

我怎样才能准确地preg_match这种搜索:

  • 我要找到的价值:#5#
  • 我的搜索值:#5#;#9#

我做了一个简单的

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

并且,它返回 true。

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

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

也返回真,而我想要假。

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

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

这将返回 false。

如果你所需要的只是在另一个字符串中找到一个你知道的字符串(#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中的第一个字符解释为分隔符。

这意味着#5#中的regex是:5 。当然,这个regex匹配它在字符串中找到的任何5。要修复它,您必须用一些分隔符(通常使用/)包围regex

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