2012-02-01 17 views
1

最近、私はいくつかランダムなことを考えていましたが、これは私の想像を絶するものでした。X、Y、Zを含む単語に一致する正規表現

は、どのように私は必ずしもそうではないが、そのためには、X、YおよびZ(または文字のそのことについては任意の組み合わせ)を含む単語のための正規表現を記述します。

私は

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

を試みたが、これはその順序で検索さだけ

我々は

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

を行うことができます。しかし、それはまた、唯一のxy一致するため、それはただ無意味です。

私は、次の注文のすべて

  • xyzの中のx、y、zは含まれていの単語と一致します正規表現を目指しています
  • XZY
  • YZX
  • YXZ
  • ZXY
  • ZYX

EDIT

は(その試合申し訳ありません)

も、それは

abxcydzのように言葉を一致させることについて(x、y、zは、上記のように任意の順序で来て)どのように前にこれを追加するのを忘れ

+2

あなたは正規表現がそのタスクに適したツールであることを確認していますか?これは、他の手段( 'text.contains(X)とtext.contains(Y)とtext.contains(Z)が行うのです...')によって簡単に解決できます(もっと読みやすい方法で)。 – Heinzi

+0

@ Heinzi、確かに、それは何が楽しいですか?:P 思考はちょうど私の空想をキャッチし、私の目的は、それが実行可能かどうかを見るために、それが読みやすいか、または些細なものではなかった。 –

答えて

3

エンジンはlookaheadsをサポートしている場合:

^(?=.*x)(?=.*y)(?=.*z) 
もちろん

または

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

それはYXZと一致するでしょうか? – yoavmatchulsky

+0

@yoavmatchulsky:与えられた 'yxz'はyesです。 –

1

どの程度

xyz|xzy|yxz|yzx|zxy|zyx 

文字の数が増加するにつれて、あなたがあたりとして(先読み(フェリックスの答えあたりなど)、または部分のチェックを行うことができますいずれかのように、これは、面倒でしょうHeinziのコメント)。

4

3文字はすべて意味しますか?その場合は、

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

私は単純な文字クラスがこのトリックを行うと思います。あなただけの主題は、以下のx、yおよび/またはzはその後、ちょうど使用が含まれているかどうかを確認したい場合は、次の

[XYZ] +

+0

これは、OPの質問に記載されている6つの文字列のいずれも含まない文字列 "xy"と "yxbz"と一致します。 –

関連する問題