使用:
preg_match_all(
"/\b".$KeyWord."\b/u",
$SearchStr,
$Array1,
PREG_OFFSET_CAPTURE);
此代码适用于所有情况,除非/
var中有$KeyWord
。然后我当然得到一个警告和不成功的比赛。
任何想法如何解决这个问题?
由于
答案 0 :(得分:1)
答案 1 :(得分:1)
你必须解析$ KeyWord并在所有规范符号之前添加“\”,你可以使用preg_quote()
答案 2 :(得分:1)
您在模式中使用动态值。与转义SQL或HTML一样,需要特定的值转义。如果你没有转义,则值内的元字符由正则表达式引擎解释。 PCRE模式的转义函数为preg_quote()
。
preg_match_all(
"(\b".preg_quote($KeyWord)."\b)u",
$SearchStr,
$Array1,
PREG_OFFSET_CAPTURE
);
PHPs preg_ *函数中模式的语法是:
DELIMITER PATTERN DELIMITER OPTIONS
/是您模式中的分隔符。因此$ keyWord中的/被识别为结束分隔符。
但是可以使用所有非字母数字字符。在Perl和JS中,您可以使用/直接定义正则表达式(而不是字符串),因此它通常是教程中的默认值。
大多数分隔符必须在模式中进行转义。
'/\//'
此规则的例外是括号。您可以使用任何括号对作为分隔符。因为它是一对,它们仍然可以在模式中使用。
'(/)'
()括号是一个很好的决定,你可以把它们算作“子模式0”。
答案 3 :(得分:0)
您可以使用preg_quote来处理反斜杠字符。
从手册:
在每个人面前加上反斜杠 属于常规的角色 表达式语法
您也可以将分隔符作为第二个参数传递,它也将被转义。但是,如果您使用#
作为分隔符,则无需转义/
所以,您可以使用:
preg_match_all("/\b".preg_quote($KeyWord, "/")."\b/u", $SearchStr,$Array1,PREG_OFFSET_CAPTURE))
或者,如果您确定您的关键字不包含任何其他正则表达式特殊字符,则只需更改分隔符,并使用以转义反斜杠:
preg_match_all("#\b".$KeyWord."\b#u", $SearchStr,$Array1,PREG_OFFSET_CAPTURE))