编辑------ 找到答案后,将尽快发布以备将来参考。
我想知道我是否可以通过简单的正则表达式任务获得帮助。
我有三个字母:X
,Y
和Z
(那些确切的字母)。
我需要为一个单词组成一个正则表达式,这个单词只包含那些在紧接着两次之后没有相同字母的单词。
例如:
Xyxzyx
符合条件,但Xxyzx
没有,因为Xx
。
编辑: 天哪,我忘了提这个。我曾多次尝试过这个问题,到目前为止已经想出了类似的东西:
当只有两个字母时,唯一可能的安排是这样的:y? (xy)* x?。然后,第三个字母有时可能(或从不)破坏模式,我试图调查之后发生的事情以及如何循环回到重复的两个字符,我认为它看起来像这样:
Y' ((xy)* x?z(-some stuff-))* - 可能更多的东西 -
此外,我不允许使用特定于编程语言的东西,例如反转,只有纯正的正则表达式。
答案 0 :(得分:-1)
我能想到的最简单的解决方案是
^(?:x(?=y|z|$)|y(?=x|z|$)|z(?=x|y|$))+$
我认为如果没有查找(?=..)
,你无法解决它。 “纯正则表达式”未定义;)
(x(?=[yz]|$)
表示匹配x
并测试下一个字符是y
还是z
还是行/字符串$
。
没有查找的可能解决方案是匹配每个组合。我只会显示2个字符。
^(?:x(?:yx)*y?|y(?:xy)*x?)$
x(yx)*y?
匹配x
,任意数量的2个字符序列xy
和待处理的y
,如果有的话......
作为州图:
(1) --x--> (2)
(1) --y--> (3)
(2) --y--> (3)
(3) --x--> (2)
(2) --$--> (4)
(3) --$--> (4)
其中(1)
是开始状态,(4)
是结束状态。 $
表示字符串结尾