代码之家  ›  专栏  ›  技术社区  ›  TZW

正则表达式:(=.*gh)和(?=\w*gh)之间的差

  •  1
  • TZW  · 技术社区  · 8 年前

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

    尝试使用正向前瞻匹配包含“gh”的单词时:

    (?=\w*gh) 工作完美,但 (?=.*gh) 匹配每个单词。

    谁能帮我一下吗。为什么带有通配符的正则表达式不能只匹配包含“gh”的单词?

    如:

    \b(?=\w*gh)[a-z]+\b 仅匹配带有“gh”的单词 right tight

    但是

    \b(?=.*gh)[a-z]+\b 匹配所有内容: 正当 , cat , 牢固的 , dog

    1 回复  |  直到 8 年前
        1
  •  0
  •   JamesT    8 年前

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

    所以 (?=.*gh) 将文本中的所有内容匹配到字符“gh”

    例如

    Isle of Wi ght公司

    如果您有两个或多个包含“gh”的单词,它将匹配整个文本,直到最后一个,因为前面的“gh”匹配 .

    例如

    Isle of Wight fli ghts

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

    例如

    爱尔兰 Wi ght公司

    使现代化

    您编辑的正则表达式将获取lookahead(见上文)捕获的文本,然后匹配其中的所有单词。”在你的例子中,狗永远不会被抓住。

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

    给定:右,猫,紧,狗

    \b(?=.*gh)[a-z]+\b 比赛 right , cat , tight

    \b(?=\w*gh)[a-z]+\b 比赛 正当 牢固的