我如何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,而我想要假。
答案 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#');