我正在使用PHP来查找以特殊正则表达式字符开头的字符串是否作为文本字符串中的单词出现。这是PHP代码:
$subject = " hello [hello [helloagain ";
$pattern = preg_quote("[hello");
if (preg_match("/\b" . $pattern . "\b/", $subject, $dummy)) {
echo "match";
} else {
echo "no match";
}
模式以字符[开头],因此,preg_quote()用于转义它。在主题中有一个 [hello ]的实例,因此应该有一个匹配,但上面的preg_match()不返回匹配项。我认为原因在于,在主题中,一个特殊的角色不被认为是一个词的开头或结尾,但我想不出任何方式围绕这个,任何想法?谢谢。
答案 0 :(得分:1)
如果我正确理解了这个问题,您可以使用带有前导空格的strpos()
分隔单词:
$subject = " hello [hello [helloagain ";
$pattern = " [hello";
if(strpos($subject, $pattern) !== FALSE)
// ...
else
// ...
我认为不在这里使用reg-ex实际上是一种更好的方法,因为你正在寻找特殊的注册表,如果你使用{{1}它们就不必转义它们}。
在所有情况下都需要进行一些修改,但是当我尝试它时,这会有效。
答案 1 :(得分:0)
你认为空格和[
符号之间的字边界不匹配是正确的。
您可以在单词之前和之后显式搜索空格(以及其他分隔符,如逗号和句点),而不是使用单词边界:
if (preg_match("/(\s|^)" . $pattern . "(?=\s|$)/", $subject, $dummy)) {