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

sim*_*son 9 php regex search find

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

例:

(us)
(jp)
(jp-us)
(jp-us-eu)
Run Code Online (Sandbox Code Playgroud)

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

/\(us\)|\(jp\)/
Run Code Online (Sandbox Code Playgroud)

然而,当我找到不止一个时,我感到困惑,被一个超级分开,没有特别的顺序:(us-jp)OR(jp-us)

任何帮助表示赞赏.

谢谢,西蒙

Tom*_*lak 15

\((\b(?:en|jp|us|eu)-?\b)+\)
Run Code Online (Sandbox Code Playgroud)

说明:

\(                     // 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)
Run Code Online (Sandbox Code Playgroud)

不匹配:

(jp-us-eu-)
(-jp-us-eu)
(-jp-us-eu-)
Run Code Online (Sandbox Code Playgroud)