【发布时间】:2013-12-20 11:15:45
【问题描述】:
假设我有一个这样的单词列表:mouse、abba、roar、accent
我需要一个匹配鼠标和咆哮的正则表达式,但不匹配 abba 或口音,因为最后两个有连续的重复字符(bb 和 cc)。
我设法想出了以下模式来仅匹配带有双连续字符的单词:
.*(.)\1.*
但是我需要的是相反的,但我很难反转它。
【问题讨论】:
标签: regex
假设我有一个这样的单词列表:mouse、abba、roar、accent
我需要一个匹配鼠标和咆哮的正则表达式,但不匹配 abba 或口音,因为最后两个有连续的重复字符(bb 和 cc)。
我设法想出了以下模式来仅匹配带有双连续字符的单词:
.*(.)\1.*
但是我需要的是相反的,但我很难反转它。
【问题讨论】:
标签: regex
你可以用这个:
\b(?:([a-z])(?!\1))+\b
它使用否定的前瞻(?!..) 来测试每个捕获是否被其自身所跟踪。为了确保该模式不会在单词结尾或单词中间开始剪切单词,我在每一侧添加了单词边界\b。
另一种方式:
(?![a-z]*([a-z])\1)\b[a-z]+\b
【讨论】:
(?:..) 只是一个非捕获组。我用它来用前瞻断言包围每个字符。我重复这组(+),因此每个字符都被逐个检查。
您可以使用这个基于前瞻的正则表达式:
^(?:(.)(?!\1))*$
【讨论】:
g和m标志