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

Need help building a regex to accept two forms of strings

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

Part 1 (Part 2 - Part 3)

Part 1 (Part 2)

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

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

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

您可以使用

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

regex demo

详情

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

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