正则表达式,避免匹配连续字符



我正在努力提高我的正则表达式技能。 我无法管理这个练习。

https://alf.nu/RegexGolf

您必须匹配没有连续相同字符的单词。 为了清楚起见,我们应该避免像abba或baab,czzc这样的模式。

我看到的唯一方法是使用捕获组:

([a-z])([a-z])21

然后有一个消极的展望:

(?!([a-z])([a-z])21)

但是在网站上它不起作用,因为它与任何东西都不匹配。

有什么建议吗? 谢谢

使用负面的前瞻:

^(?:(.)(?!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).*$

这将在一开始断言字符串中的任何位置都没有重复的字符。

^(?!cr|pal|tar([a-z]{1,4}([a-z](\1[a-z]{0,5}$ 这在您提供的链接中对我有用。我想我们必须将模式与连续字母相匹配。但也有一些例外,我不得不在开始时使用消极的展望。我使用 ([a-z](\1 来匹配被可能限制的可能字符包围的连续字符。希望这有帮助! 附上屏幕截图以供参考。

https://i.stack.imgur.com/va1Uq.png

感谢Tim Biegeleisen,这就是答案。^(?!.*(.)(.)21).*$

最新更新