3

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

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

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

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

4

1 回答 1

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
于 2013-05-13T03:45:27.170 回答