regex 创建正则表达式模式来匹配多个完整的单词

pexxcrt2  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(90)

我试图使用这个,但无法理解这里有什么问题

preg_match('/\b'.$string.'\b/i', $fullstring);

字符串
这样做的目的是只匹配一个完整的单词,其中该单词是某人的输入,这将是变量$string的一部分。|'在正则表达式操作中充当OR。

<?php

$fullstring = 'Palo Alto New york colombia europe today Tomorrrow';
$string = 'my|name|is|alto|better';
preg_match('/\b'.preg_quote($string).'\b/i', $fullstring, $match);
print_r($match);


输出为 null。可能有什么问题?

pcww981p

pcww981p1#

如果您的输入是具有可选分支的正则表达式,则需要将单词边界应用于组,请参见

 preg_match('/\b(?:' . $string . ')\b/i', $fullstring, $match);

字符串
为什么要使用分组结构?因为如果你只是在'my|name|is|alto|better'正则表达式模式中添加单词边界,只有mybetter会受到部分限制:my只会在单词的开头匹配,而better只会在单词的结尾匹配-简而言之,这就是你在添加单词边界而没有首先对备选项进行分组之后所遇到的问题的本质。

相关问题