在匹配使用变量形成的模式时转义字符的特殊含义:PHP:preg_match

时间:2013-05-13 03:39:45

标签: php regex

我正在执行正则表达式匹配,以查找文本中某些特定单词集的第一次出现。因为我不想在它们是某些其他单词的子字符串时产生误报,所以我想使用模式。

例如,我想找到整个单词“ DOM ”,而不是“ RANDOMIZER ”中的子字符串DOM。因此,我使用模式“ \ bDOM \ b ”来考虑所有那些在两边都带有字边界的DOM。但DOM,其他类似的模式字符串来自数组$ tags。将每个标签从$ tag读入$ tag,比较实际上是:

preg_match("/\b$tag\b/", ...)

但如果$ tag =“ .NET ”,这会遇到麻烦。然后“\ b $ tag \ b”将开始匹配 CNET INET 等字符串,将解释为通配符。那么,我们如何逃避用于形成模式的变量中字符的特殊含义?

1 个答案:

答案 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