正则表达式可选组

时间:2013-09-05 10:01:32

标签: regex optional regex-group

我正在使用这个正则表达式:

((?:[a-z][a-z]+))_(\d+)_((?:[a-z][a-z]+)\d+)_(\d{13})

匹配这样的字符串:

SH_6208069141055_BC000388_20110412101855

分成4组:

SH
6208069141055
BC000388
20110412101855

问题:如何使第一组成为可选组,以便生成的组为空字符串?
我希望在每种情况下都能得到4组。

此案例的输入字符串:(第一组后没有下划线)

6208069141055_BC000388_20110412101855

2 个答案:

答案 0 :(得分:23)

您可以轻松简化正则表达式:

(?:([a-z]{2,})_)?(\d+)_([a-z]{2,}\d+)_(\d+)$

我不确定没有第一组的输入字符串是否会有下划线,但如果它是整个字符串,你可以使用上面的正则表达式。

regex101 demo

如您所见,第二场比赛中匹配的组1为空,并从匹配的组2开始。

答案 1 :(得分:-1)

要使一个非捕获的,零到更多的匹配组,必须附加?

(?: ..... )?
^          ^____ optional
|____ group