我正在执行正则表达式匹配,以查找文本中某些特定单词集的第一次出现。因为我不想在它们是某些其他单词的子字符串时产生误报,所以我想使用模式。
例如,我想找到整个单词“ DOM ”,而不是“ RANDOMIZER ”中的子字符串DOM。因此,我使用模式“ \ bDOM \ b ”来考虑所有那些在两边都带有字边界的DOM。但DOM,其他类似的模式字符串来自数组$ tags。将每个标签从$ tag读入$ tag,比较实际上是:
preg_match("/\b$tag\b/", ...)
但如果$ tag =“ .NET ”,这会遇到麻烦。然后“\ b $ tag \ b”将开始匹配 CNET , INET 等字符串,将。解释为通配符。那么,我们如何逃避用于形成模式的变量中字符的特殊含义?
答案 0 :(得分:5)
查看preg_quote()
。
preg_quote()使用 str 并在作为正则表达式语法一部分的每个字符前放置一个反斜杠。如果您有一个需要在某些文本中匹配的运行时字符串,并且该字符串可能包含特殊的正则表达式字符,这将非常有用。
示例#1:
$keywords = '$40 for a g3/400';
$keywords = preg_quote($keywords, '/');
echo $keywords; // returns \$40 for a g3\/400