简单的正则表达式任务

时间:2015-12-06 18:44:08

标签: regex

编辑------ 找到答案后,将尽快发布以备将来参考。

我想知道我是否可以通过简单的正则表达式任务获得帮助。

我有三个字母:XYZ(那些确切的字母)。

我需要为一个单词组成一个正则表达式,这个单词只包含那些在紧接着两次之后没有相同字母的单词。

例如:

Xyxzyx符合条件,但Xxyzx没有,因为Xx

编辑: 天哪,我忘了提这个。我曾多次尝试过这个问题,到目前为止已经想出了类似的东西:

当只有两个字母时,唯一可能的安排是这样的:y? (xy)* x?。然后,第三个字母有时可能(或从不)破坏模式,我试图调查之后发生的事情以及如何循环回到重复的两个字符,我认为它看起来像这样:

Y' ((xy)* x?z(-some stuff-))* - 可能更多的东西 -

此外,我不允许使用特定于编程语言的东西,例如反转,只有纯正的正则表达式。

1 个答案:

答案 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)是结束状态。 $表示字符串结尾