我正在尝试匹配包含以下内容的单词:eph gro iss
我有在这个例子eph|gro|iss
中匹配的: . 但是我需要匹配整个单词。例如,它应该匹配所有的not just和not
justThankseph gro iss
new grow miss eph
miss
iss
grow
gro
你可以这样做:
\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
)
)