【问题标题】:Regex to match words containing X, Y AND Z正则表达式匹配包含 X、Y 和 Z 的单词
【发布时间】:2012-02-02 19:01:05
【问题描述】:

我最近一直在想一些随机的事情,这件事引起了我的注意。

如何为包含 X、Y 和 Z(或就此而言的任何字母组合)的单词编写正则表达式,但不一定按此顺序。

我试过了

[^xyz]*x[^xyz]*y[^xyz]*z

但这只是按这个顺序搜索

我们可以做

[^xyz ]*[xyz][^xyz ]*[xyz][^xyz ]*[xyz]

但这没什么用,因为它也只匹配 xy。

我的目标是匹配 以下所有顺序中包含 x、y 和 z 的单词的正则表达式

  • xyz
  • xzy
  • yzx
  • yxz
  • zxy
  • zyx

编辑

之前忘记添加了(抱歉)

如何让它也匹配像这样的词

abxcydz(x、y 和 z 按上述任意顺序排列)

【问题讨论】:

  • 您确定正则表达式是该任务的正确工具吗?这可以通过其他方式(if text.contains(X) and text.contains(Y) and text.contains(Z) do ...)轻松解决(并且以更易读的方式)。
  • @Heinzi,当然,但这有什么乐趣呢? :P 这个想法刚刚引起了我的注意,我的目标不是让它可读或琐碎,只是看看它是否可行。

标签: regex


【解决方案1】:

你的意思是所有三个字母?如果是,那么:

(?=\w*X)(?=\w*Y)(?=\w*Z)\w*

【讨论】:

    【解决方案2】:

    如果引擎支持lookaheads:

    ^(?=.*x)(?=.*y)(?=.*z)
    

    ^(?=[^x]*x)(?=[^y]*y)(?=[^z]*z)
    

    【讨论】:

    • @yoavmatchulsky: 给定yxz 然后是的。
    【解决方案3】:

    怎么样

    xyz|xzy|yxz|yzx|zxy|zyx
    

    当然,随着字母数量的增加,这会变得很麻烦,因此您可以进行前瞻(根据 Felix 的回答)或子字符串检查(根据 Heinzi 的评论)。

    【讨论】:

      【解决方案4】:

      我认为一个简单的字符类就可以解决问题。如果您只想查看主题是否包含 x、y 和/或 z,则只需使用以下内容:

      [xyz]+

      【讨论】:

      • 这将匹配字符串“xy”和“yxbz”,其中不包含 OP 问题中列出的六个字符串。
      猜你喜欢
      • 2016-01-14
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多