Mam mniej więcej takie wyrażenie regularne:
(?:(?:ala\s)(?<Ala>\d+(?:-\d+)?))?\s?(?:(?:kota\s)(?<Kota>\d+(?:-\d+)?))?
Przykładowe dopasowania:
ala 1-2
ala 1
ala 1-2 kota 1-2
ala 1 kota 2
kota 1-2
Teraz chciałabym zmienić to wyrażenie tak, by zakres akceptował tylko wtedy, gdy jest na końcu, czyli poniższe jest poprawne:
ala 1 kota 1-2
ala 1-2
A poniższe nie powinno być złapane w całości:
ala 1-2 kota 1 //dopasowanie: ala 1
Jednocześnie utrudnienie jest takie, że zależy mi na tym, by zakres był w nazwanej grupie (w dalszej części kodu grupy są mocno powiązane z tym, co się dzieje). Gdyby nie to, to zrobiłabym po prostu:
(?:(?:ala\s)(?<Ala>\d+))?\s?(?:(?:kota\s)(?<Kota>\d+))?(?:-\d+)?
Czy jest na to jakiś sprytny myk? Czy lepiej kombinować z przerabianiem tej części, która opiera się o nazwane grupy...?