【问题标题】:Simple regex task [duplicate]简单的正则表达式任务[重复]
【发布时间】:2015-12-06 18:44:08
【问题描述】:

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

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

我有三个字母:XYZ(这些字母完全相同)。

我需要为一个仅由三个单词组成的单词编写一个正则表达式,这些单词没有两个相同的字母。

例如:

Xyxzyx 符合条件,但 Xxyzx 不符合条件,因为 Xx

编辑: 哦,天哪,我忘了提这个。我已经尝试多次查看这个东西,到目前为止已经想出了这样的东西:

当只有两个字母时,唯一可能的排列方式是:y? (xy)* x?。然后,第三个字母有时(或从不)可能会破坏模式,我正在尝试研究之后会发生什么以及它如何循环回到重复的两个字符,我认为它看起来像这样:

是吗? ( (xy)* x? z (-some stuff-) )* -possibly more stuff-

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

【问题讨论】:

  • 闻起来像分配的任务。到目前为止你尝试过什么......
  • 标记一种语言,并发布您的语料库、代码和错误。

标签: regex


【解决方案1】:

我能想到的最简单的解决方案是

^(?:x(?=y|z|$)|y(?=x|z|$)|z(?=x|y|$))+$

我认为如果不查找 (?=..),您将无法解决它。 “纯正则表达式”未定义;)

(x(?=[yz]|$) 表示匹配x 并测试下一个字符是yz还是行/字符串的结尾$


无需查找的可能解决方案是匹配每个组合。我只会显示 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) 是结束状态。 $ 表示字符串结束

【讨论】:

  • 我认为该作业不允许前瞻。
  • @tripleee:恐怕你是对的
  • 嗯,感谢您尝试帮助我,我找到了解决方案。我现在还有其他事情要做,但很快就会在这里发布,以供将来有一天可能需要它的人参考。还将帖子标题更改为可能出现在 SE 搜索中关于此问题的内容。
猜你喜欢
  • 2013-06-05
  • 2020-09-07
  • 1970-01-01
  • 2017-07-19
  • 2021-03-11
  • 2023-03-12
  • 2011-09-20
  • 1970-01-01
  • 2016-01-17
相关资源
最近更新 更多