Php 尝试使用正则表达式查找字母组

Php 尝试使用正则表达式查找字母组,php,regex,search,find,Php,Regex,Search,Find,我需要找到一个或多个已定义的字符组,这些字符组用括号括起来。如果存在多个组,则将用连字符分隔 例如: (us) (jp) (jp-us) (jp-us-eu) 如果字符串只包含一个组,我已经找到了如何查找该组: /\(us\)|\(jp\)/ 然而,当我发现不止一个,并没有特定的顺序,而是被一个炒作隔开时,我感到困惑:(美国jp)或(美国jp) 感谢您的帮助 谢谢, 西蒙 说明: \( // opening paren (

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

例如:

(us)
(jp)
(jp-us)
(jp-us-eu)
如果字符串只包含一个组,我已经找到了如何查找该组:

/\(us\)|\(jp\)/
然而,当我发现不止一个,并没有特定的顺序,而是被一个炒作隔开时,我感到困惑:
(美国jp)
(美国jp)

感谢您的帮助

谢谢, 西蒙

说明:

\( // 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 不匹配:

(jp-us-eu-)
(-jp-us-eu)
(-jp-us-eu-)
试试这个:

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

这将匹配括号中的任意两个字母序列,我的括号中包含更多由hypens分隔的两个字母序列。所以
(ab)
(ab-cd)
(ab-cd-ef)
(ab-cd-ef-gh)
等等。你能澄清一下你在找什么吗?您提供的正则表达式将同时定位(us jp)和(jp us)。很好的解决方案,我有一个较长的解决方案,但在括号之前指定
\b
单词边界可以确保我们没有尾随破折号。您能解释一下
?:
在这个上下文中的作用吗?@user See:@Tomalak Nice!众所周知,这些东西很难在谷歌上搜索。另一种可能是+1。但不符合“定义的字符组”要求。然而,解决这个问题需要你自己重复。
(jp-us-eu-)
(-jp-us-eu)
(-jp-us-eu-)
/\([a-z]{2}(?:-[a-z]{2})*\)/