web-dev-qa-db-ja.com

正規表現のオプショングループ

私はこの正規表現を使用しています:

((?:[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
23
joe

次のように正規表現を簡単に簡単にできます。

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

最初のグループのない入力文字列にアンダースコアがあるかどうかはわかりませんが、文字列全体であれば上記の正規表現を使用できます。

regex101デモ

ご覧のとおり、2番目の一致で一致したグループ1は空で、一致したグループ2から始まります。

25
Jerry