Ik gebruik deze regex:
((?:[a-z][a-z]+))_(\d+)_((?:[a-z][a-z]+)\d+)_(\d{13})
om strings als volgt te matchen:
SH_6208069141055_BC000388_20110412101855
opsplitsen in 4 groepen:
SH
6208069141055
BC000388
20110412101855
Vraag:Hoe maak ik de eerste groep optioneel, zodat de resulterende groep een lege tekenreeks is?
Ik wil in elk geval 4 groepen krijgen, indien mogelijk.
Invoertekenreeks voor dit geval: (geen onderstreping na de eerste groep)
6208069141055_BC000388_20110412101855
Antwoord 1, autoriteit 100%
U kunt uw regex eenvoudig vereenvoudigen tot dit:
(?:([a-z]{2,})_)?(\d+)_([a-z]{2,}\d+)_(\d+)$
^ ^^
|--------------||
| first group ||- quantifier for 0 or 1 time (essentially making it optional)
Ik weet niet zeker of de invoertekenreeks zonder de eerste groep het onderstrepingsteken zal hebben of niet, maar u kunt de bovenstaande regex gebruiken als het de hele tekenreeks is.
Zoals je kunt zien, is de overeenkomende groep 1 in de tweede wedstrijd leeg en begint bij overeenkomende groep 2.
Antwoord 2, autoriteit 97%
Als u een niet-vastleggende, nul tot meer overeenkomende groep maakt, moet u ?
toevoegen.
(?: ..... )?
^ ^____ optional
|____ group