我正在尝试提高我的正则表达式技能。 我无法管理此练习。
您必须匹配没有连续相同字符的单词。 为了清楚起见,我们应该避免使用abba或baab czzc之类的模式。
我看到的唯一方法是使用捕获组:
([a-z])([a-z])\2\1
然后进行负面预测:
(?!([a-z])([a-z])\2\1)
但是在该站点上它不起作用,因为它与任何内容都不匹配。
有什么建议吗? 谢谢
答案 0 :(得分:1)
使用否定前瞻:
^(?:(.)(?!\1))*$
说明:
^ from the start of the input
(?:
(.) match AND capture a single character
(?!\1) then assert that what follows is a different character (not the same)
)* match zero or more such matching characters
$ end of the input
另一种可能更清洁的方法是在模式开始时先进行全局负向预测:
^(?!.*(.)\1).*$
这将在一开始就断言在字符串中的任何位置都没有重复的字符。
答案 1 :(得分:0)
感谢蒂姆·比格莱森(Tim Biegeleisen),这是答案。
^(?!.*(.)(.)\2\1).*$
答案 2 :(得分:0)
^(?! cr | pal | tar)[a-z] {1,4}([a-z])\ 1 [a-z] {0,5} $ 在您给的链接中,这对我有用。我猜我们必须将模式与连续的字母匹配。但是有一些例外,一开始我不得不用负面的眼光看待。我已经使用([[a-z])\ 1来匹配连续的字符,并用可能的限制字符包围。希望这可以帮助! 随附屏幕截图以供参考。