webentwicklung-frage-antwort-db.com.de

Regex optionale Gruppe

Ich benutze diesen regulären Ausdruck:

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

um solche Zeichenfolgen zuzuordnen:

SH_6208069141055_BC000388_20110412101855

einteilung in 4 Gruppen:

SH
6208069141055
BC000388
20110412101855

Frage: Wie mache ich die erste Gruppe optional, so dass die resultierende Gruppe eine leere Zeichenfolge ist?
Ich möchte, wenn möglich, in jedem Fall 4 Gruppen bekommen.

Eingabezeichenfolge für diesen Fall: (keine Unterstreichung nach der ersten Gruppe)

6208069141055_BC000388_20110412101855
23
joe

Sie können Ihren regulären Ausdruck leicht so vereinfachen:

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

Ich bin nicht sicher, ob die Eingabezeichenfolge ohne die erste Gruppe den Unterstrich enthält oder nicht, aber Sie können den obigen regulären Ausdruck verwenden, wenn es sich um die gesamte Zeichenfolge handelt.

regex101 Demo

Wie Sie sehen, ist die übereinstimmende Gruppe 1 in der zweiten Übereinstimmung leer und beginnt bei der übereinstimmenden Gruppe 2.

25
Jerry