我正在尝试匹配包含以下内容的单词:eph gro iss
我有在这个例子eph|gro|iss中匹配的: . 但是我需要匹配整个单词。例如,它应该匹配所有的not just和not
justThankseph gro issnew grow miss ephmississgrowgro
你可以这样做:
\b(\w*(eph|gro|iss)\w*)\b
这个怎么运作:
该表达式用 word-boundary anchors 括起来\b,因此它只匹配整个单词。这些词必须包含其中一个字面值eph,gro或iss某处,但这些\w*部分允许字面值出现在整个单词中的任何位置。
这里重要的是您需要对“单词”采用一些特定的定义。如果您对单词是匹配的序列的正则表达式定义感到满意,[a-zA-Z0-9_]+那么您可以逐字使用上述内容。
如果您对单词的定义是其他内容,则需要适当地替换\b锚点和\w类。
尝试这个:
\b([a-zA-Z]*(?:eph|gro|iss)[a-zA-Z]*)\b
分解:
\b- 单词边界(- 开始捕捉[a-zA-Z]*- 零个或多个字母(?:eph|gro|iss)- 你原来的正则表达式,非捕获[a-zA-Z]*- 零个或多个字母)- 结束捕获\b- 单词边界示例输出:
php > $string = "new grow miss eph";
php > preg_match_all("/\b([a-zA-Z]*(?:eph|gro|iss)[a-zA-Z]*)\b/", $string, $matches);
php > print_r($matches);
Array
(
[0] => Array
(
[0] => grow
[1] => miss
[2] => eph
)
[1] => Array
(
[0] => grow
[1] => miss
[2] => eph
)
)