我正在寻找一个正则表达式来解析一个字符串,该字符串可以是以下两种形式之一:-
第1部分(第2部分-第3部分)
或
第1部分(第2部分)
以下正则表达式匹配第一个字符串并捕获所有三个部分
(.*)\((.*)(?:-)(.*)\)
但是我无法即兴创作它可以匹配两个字符串。我想要一个正则表达式匹配两个字符串。不确定是否有可能。
答案 0 :(得分:4)
您可以使用
'~(.*)\((.*?)(?:-(.*))?\)~'
请参见regex demo
详细信息
(.*)
-组1:尽可能多的除换行符以外的0+个字符\(
-一个(
字符(.*?)
-第2组:除换行符以外的任何0+个字符,并且尽可能少(?:-(.*))?
-一个与-
匹配的可选组,然后将除换行符以外的任何0+个字符尽可能多地捕获到组3中\)
-一个)
字符。如果除了字符串中显示的括号之外没有其他括号,则可以将模式优化为^([^()]*)\(([^()-]*)(?:-([^()]*))?\)$
。