正则表达式匹配包含X,Y和Z的单词

时间:2012-02-01 15:47:45

标签: regex

我最近一直在考虑一些随意的事情,而这一点引起了我的兴趣。

如何为包含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按上述任意顺序排列)

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

如果引擎支持lookaheads

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

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

答案 2 :(得分:1)

怎么样

xyz|xzy|yxz|yzx|zxy|zyx

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

答案 3 :(得分:0)

我认为一个简单的角色类可以做到这一点。如果您只想查看主题是否包含x,y和/或z,那么只需使用以下内容:

[XYZ] +