2012-02-01 244 views
1

最近我一直在想一些隨機的東西,而這一個引起了我的興趣。正則表達式來匹配包含X,Y和Z的單詞

如何爲包含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來以任何順序同上)添加此

+2

你確定這正則表達式是該任務的合適的工具?這可以通過其他方式(如果text.contains(X)和text.contains(Y)和text.contains(Z)做...)簡單地(以更可讀的方式)解決。 – Heinzi 2012-02-01 15:49:52

+0

@Heinzi,當然,但那有什麼好玩的?:P 這個想法剛剛引起了我的興趣,我的目標並不是爲了讓它變得可讀或微不足道,而是爲了看看它是否可行。 – 2012-02-02 10:58:42

回答

3

如果引擎支持lookaheads

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

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

它會匹配YXZ嗎? – yoavmatchulsky 2012-02-01 15:50:59

+0

@yoavmatchulsky:給出'yxz'就是。 – 2012-02-01 15:52:22

1

如何

xyz|xzy|yxz|yzx|zxy|zyx 

當然會很麻煩的字母數量的增加,所以你既可以做向前看符號(按照Felix的答案)或串支票(如每Heinzi的評論)。

4

你是指所有三個字母?如果是這樣,那麼:

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

我會認爲一個簡單的字符類會做的伎倆。如果你只是想看看對象是否包含X,Y和/或Z然後只需使用以下命令:

[XYZ] +

+0

這將匹配字符串「xy」和「yxbz」,其中不包含OP問題中列出的六個字符串。 – 2012-02-01 16:17:29

相關問題