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

问题描述 投票:0回答:1

我试图使用它,但无法理解这里出了什么问题

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。可能出了什么问题?

php regex validation preg-match word-boundary
1个回答
0
投票

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

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

为什么要使用分组结构?因为如果您只是将单词边界添加到


'my|name|is|alto|better'
正则表达式模式中,则只有
my
better
会受到部分限制:
my
只会匹配单词的开头,而
better
会匹配单词的末尾一个单词的 - 简而言之,这就是在添加单词边界而不首先对替代项进行分组之后遇到的问题的本质。

© www.soinside.com 2019 - 2024. All rights reserved.