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})*\)/