2009-09-26 23 views
7

括弧で囲まれた1つ以上の定義された文字グループを見つける必要があります。複数のグループが存在する場合は、ハイフンで区切られます。正規表現で文字グループを検索しよう

例:

(us) 
(jp) 
(jp-us) 
(jp-us-eu) 

私は、文字列が一つのグループだけが含まれている場合、グループを検索する方法を考え出した:

/\(us\)|\(jp\)/ 

それはより多くを見つけることに来るときしかし、私はバッフル付きです1つは、ハイフンで区切られ、特定の順序ではありません:(us-jp)または(jp-us)

何か助けていただければ幸いです。

おかげで、 サイモン

+0

あなたはあなたが探しているものを明確にすることができますか?あなたが提供する正規表現は、(us-jp)と(jp-us)の両方を見つけるでしょう。 – bbg

答えて

13
\((\b(?:en|jp|us|eu)-?\b)+\) 

説明:

 
\(     // opening paren 
(      // match group one 
    \b     // word boundary 
    (?:en|jp|us|eu)  // your defined strings 
    -?     // a hyphen, optional 
    \b     // another word boundary 
)+      // repeat 
\)      // closing paren 

試合:

(us) 
(jp) 
(jp-us) 
(jp-us-eu) 

が一致しません:

(jp-us-eu-) 
(-jp-us-eu) 
(-jp-us-eu-) 
+1

良い解決法、私はもっと長いものを持っていましたが、カッコの前に '\ b'単語境界を指定することで、そこに末尾のダッシュがないことが保証されました。 –

2

はこれを試してみてください:私はハイフンでseparetedより二文字の配列を含むことを括弧内の任意の2つの文字列にマッチします

/\([a-z]{2}(?:-[a-z]{2})*\)/ 

。したがって、 (ab), (ab-cd), (ab-cd-ef), (ab-cd-ef-gh)など

+0

別の可能性、+1。ただし、「定義された文字グループ」の要件と一致しません。しかし、これを修正するには、自分自身を繰り返す必要があります。 – Tomalak

関連する問題