【问题标题】:Trying to find groups of letters with regex尝试使用正则表达式查找字母组
【发布时间】:2009-09-26 18:13:47
【问题描述】:

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

例子:

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

如果字符串只包含一个组,我已经知道如何找到组:

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

但是,当我发现不止一个时,我很困惑,用连字符分隔并且没有特定的顺序:(us-jp) OR (jp-us)

感谢任何帮助。

谢谢, 西蒙

【问题讨论】:

  • 你能澄清一下你在找什么吗?您提供的正则表达式将同时定位 (us-jp) 和 (jp-us)。

标签: php regex search find


【解决方案1】:
\((\b(?:en|jp|us|eu)-?\b)+\)

解释:

\( // 开括号 ( // 匹配第一组 \b // 字边界 (?:en|jp|us|eu) // 你定义的字符串 -? // 连字符,可选 \b // 另一个单词边界 )+ // 重复 \) // 结束括号

匹配:

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

不匹配:

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

【讨论】:

  • 很好的解决方案,我有一个更长的解决方案,但在括号前指定 \b 单词边界可确保我们没有尾随破折号。
  • 您能解释一下?: 在这种情况下的作用吗?
  • @Tomalak 不错!众所周知,这些东西在 Google 上很难搜索。
【解决方案2】:

试试这个:

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

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

【讨论】:

  • 另一种可能性,+1。但是,不符合“定义的字符组”要求。然而,解决这个问题需要重复自己。
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
  • 2023-02-22
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多