为什么这两个表达式不相等?
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
我想捕捉相邻字母不相同的单词。这个找到一个字母,然后检查它旁边的另一个字母是否不一样。这个有效。
\b((\w)(?!()))+\b
这个说不要匹配字母相邻的单词,至少我认为它应该这样做,但它不起作用。
\b(?!((\w)))+\b
第二个模式\b(?!((\w)))+\b
很奇怪
没有
</code>因为否定的前瞻<code>(?!...)
没有形成一个捕获组,所以你只有两个组如果整体模式匹配,那么您知道否定前瞻没有匹配,所以
</code>和<code>
永远不会被定义您正在请求一个零宽度模式的多个副本(否定前瞻匹配字符串中的 单点)
负向前瞻永远不会消耗任何字符,所以两个单词边界之间永远不会有任何字符
很难知道如何为您 "fix" 这个,因为我看不到您试图实现的算法。您的第一个模式不需要 </code> 周围的括号:只是 <code>(?!)
就可以了,并且您不会捕获整个单词以在匹配后使用,这通常是比使用更好的方法整个匹配的字符串
我想我会写这个
\b((?:(\w)(?!))+)\b