我是Regex的新手,我似乎无法解决这个问题:
尝试匹配包含" gh"使用正向前瞻:
(?= \ w * gh)效果很好但(?=。* gh)匹配每个单词。
请有人帮我这个。为什么带有通配符的正则表达式不能仅匹配包含' gh'?
的单词例如:
\b(?=\w*gh)[a-z]+\b
仅匹配带有' gh' right
,猫,tight
,狗
但
\b(?=.*gh)[a-z]+\b
匹配所有内容:right
,cat
,tight
,dog
答案 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
<强>更新强>
您编辑的正则表达式将采用前瞻捕获的文本(参见上文),然后匹配其中的所有单词。在你的例子中,从未捕获过“狗”。
鉴于:对,猫,紧,狗
\b(?=.*gh)[a-z]+\b
匹配right
,cat
,tight
,狗
\b(?=\w*gh)[a-z]+\b
匹配right
,cat,tight
,狗