2011-12-02 13 views
5

Próbuję utworzyć wyrażenie regularne, które wybierze najdłuższą z dwóch opcji z ciągu.Wyrażenie regularne, aby wybrać najdłuższą opcję

Wartość liczbowa o długości do 15 znaków lub o dowolnej długości do 11 znaków.

Do tej pory mam to:

^([0-9]{1,15}|.{1,11}) 

Ale na przykład napis: '7elevenshopfood' zostaje skrócony do '7' ponieważ wygląda na pierwszej części nawiasach. A jeśli mogę przełączyć go do

^(.{1,11}|[0-9]{1,15}) 

ciąg '123456789123456789' zostaje skrócony do '12345678912' ponieważ wygląda na pierwszej części wypowiedzi ponownie.

Ktoś z większą wiedzą na temat regexp ma pomysł?

+0

Co regex dialekt/język/narzędzia? – Qtax

Odpowiedz

6

Tak działa większość dialerów regex, alternacje są testowane w kolejności, w jakiej zostały napisane, a pierwsza pasująca część zakończy wyszukiwanie.

W twoim przypadku można obejść, że z czymś takim:

^(\d{12,15}|.{1,11}) 
+2

Doskonała odpowiedź. – FailedDev

+0

takie proste! : +1. – Toto

+0

To jest bardzo oczywiste, gdy widzisz ... Dziękuję! – Sonny