需要帮助来构建正则表达式以接受两种形式的字符串

时间:2018-08-02 10:37:56

标签: php regex regex-group

我正在寻找一个正则表达式来解析一个字符串,该字符串可以是以下两种形式之一:-

  

第1部分(第2部分-第3部分)

  

第1部分(第2部分)

以下正则表达式匹配第一个字符串并捕获所有三个部分

(.*)\((.*)(?:-)(.*)\)

但是我无法即兴创作它可以匹配两个字符串。我想要一个正则表达式匹配两个字符串。不确定是否有可能。

1 个答案:

答案 0 :(得分:4)

您可以使用

'~(.*)\((.*?)(?:-(.*))?\)~'

请参见regex demo

详细信息

  • (.*)-组1:尽可能多的除换行符以外的0+个字符
  • \(-一个(字符
  • (.*?)-第2组:除换行符以外的任何0+个字符,并且尽可能少
  • (?:-(.*))?-一个与-匹配的可选组,然后将除换行符以外的任何0+个字符尽可能多地捕获到组3中
  • \)-一个)字符。

如果除了字符串中显示的括号之外没有其他括号,则可以将模式优化为^([^()]*)\(([^()-]*)(?:-([^()]*))?\)$