为什么这两个表达式不相等?

Why those two expressions are not equal?

我想捕捉相邻字母不相同的单词。这个找到一个字母,然后检查它旁边的另一个字母是否不一样。这个有效。

\b((\w)(?!()))+\b

这个说不要匹配字母相邻的单词,至少我认为它应该这样做,但它不起作用。

\b(?!((\w)))+\b

第二个模式\b(?!((\w)))+\b很奇怪

  • 没有</code>因为否定的前瞻<code>(?!...)没有形成一个捕获组,所以你只有两个组

  • 如果整体模式匹配,那么您知道否定前瞻没有匹配,所以</code>和<code>永远不会被定义

  • 您正在请求一个零宽度模式的多个副本(否定前瞻匹配字符串中的 单点

  • 负向前瞻永远不会消耗任何字符,所以两个单词边界之间永远不会有任何字符

很难知道如何为您 "fix" 这个,因为我看不到您试图实现的算法。您的第一个模式不需要 </code> 周围的括号:只是 <code>(?!) 就可以了,并且您不会捕获整个单词以在匹配后使用,这通常是比使用更好的方法整个匹配的字符串

我想我会写这个

\b((?:(\w)(?!))+)\b