正则表达式:(?=。* gh)和(?= \ w * gh)

时间:2017-12-14 09:35:15

标签: regex-lookarounds

我是Regex的新手,我似乎无法解决这个问题:

尝试匹配包含" gh"使用正向前瞻:

(?= \ w * gh)效果很好但(?=。* gh)匹配每个单词。

请有人帮我这个。为什么带有通配符的正则表达式不能仅匹配包含' gh'?

的单词

例如:

\b(?=\w*gh)[a-z]+\b仅匹配带有' gh' right,猫,tight,狗

\b(?=.*gh)[a-z]+\b匹配所有内容:rightcattightdog

1 个答案:

答案 0 :(得分:0)

正则表达式中的

.匹配除行终止符之外的任何字符。这包括空格。

所以(?=.*gh)会匹配文字中的所有内容,直到字符'gh'

e.g。

Isle of Wi GHT

如果你有两个或多个包含'gh'的单词,它会匹配整个文本到最后一个,因为前面的'gh匹配.

e.g。

Isle of Wight fli亮灯

\w仅匹配单词字符。即[a-zA-Z0-9_]因此它不会与空格匹配,因此不会捕获包含'gh'之前的所有单词

e.g。

小岛Wi ght

<强>更新

您编辑的正则表达式将采用前瞻捕获的文本(参见上文),然后匹配其中的所有单词。在你的例子中,从未捕获过“狗”。

尝试使用https://regex101.com/

鉴于:对,猫,紧,狗

\b(?=.*gh)[a-z]+\b匹配rightcattight,狗

\b(?=\w*gh)[a-z]+\b匹配right,cat,tight,狗