试图用正则表达式查找字母组

时间:2009-09-26 18:13:47

标签: php regex search find

我需要在括号中找到一个或多个已定义的字符组。如果存在多个组,则将用连字符分隔。

示例:

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

如果字符串只包含一个组,我已经想出如何找到该组:

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

然而,当我找到不止一个,被夸大而且没有特定顺序分开时,我感到困惑:(us-jp)(jp-us)

感谢任何帮助。

谢谢, 西蒙

2 个答案:

答案 0 :(得分:15)

\((\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 :(得分:2)

试试这个:

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

这将匹配括号中的任何两个字母序列,即我包含更多由双语分开的两个字母序列。所以(ab)(ab-cd)(ab-cd-ef)(ab-cd-ef-gh)等。