Ik ben op zoek naar een juiste regular expression voor het volgende probleem, maar ik niet zo'n regex-goeroe helaas. Maar die zijn hier vast wel.
Ik heb een string die bestaat uit vier velden. Die vier velden zijn gescheiden door underscores en een streepje. Het eerste veld mag tussen de 5 en 7 posities lang zijn. Het tweede veld tussen 1 en 13. Het derde veld moet 3 lang zijn. Het vierde veld moet 4 lang zijn.
Voorbeelden:
12345_1234567890123-123_12
1234567_1234-123_12
Nu heb ik de volgende expressie:
([0-9]{5,7})_([0-9]{1,13})-([0-9]{3})_([0-9]{2})
Dit werkt grotendeels, maar matcht (in ieder geval hier) ook als het eerste veld langer is dan 7 en/of het laatste veld langer dan 2.
Deze komen er dus ook door (terwijl dat niet de bedoeling is:
12345678_1234567890123-123_12
12345_1234567890123-123_123
Hoe dwing ik af dat hij daar niet op matcht? Het probleem is dat ik niet met totale stringlengte kan werken, omdat de eerste twee velden variabel in lengte zijn.
Ik heb een string die bestaat uit vier velden. Die vier velden zijn gescheiden door underscores en een streepje. Het eerste veld mag tussen de 5 en 7 posities lang zijn. Het tweede veld tussen 1 en 13. Het derde veld moet 3 lang zijn. Het vierde veld moet 4 lang zijn.
Voorbeelden:
12345_1234567890123-123_12
1234567_1234-123_12
Nu heb ik de volgende expressie:
([0-9]{5,7})_([0-9]{1,13})-([0-9]{3})_([0-9]{2})
Dit werkt grotendeels, maar matcht (in ieder geval hier) ook als het eerste veld langer is dan 7 en/of het laatste veld langer dan 2.
Deze komen er dus ook door (terwijl dat niet de bedoeling is:
12345678_1234567890123-123_12
12345_1234567890123-123_123
Hoe dwing ik af dat hij daar niet op matcht? Het probleem is dat ik niet met totale stringlengte kan werken, omdat de eerste twee velden variabel in lengte zijn.