2013-06-13 20 views
5

To ostatecznie stanie się częścią większego wyrażenia, ale zredukuję je do znacznie prostszej formy (tzn. Będzie prawdziwa możliwość 40 znaków zamiast 19 możliwych tutaj). Biorąc pod uwagę następujące wejścia:Minimalna długość wyrażenia regularnego

;123?T 

dostaję udanego meczu przeciwko tej regex:

^(?:;(\d{0,19})\?.){1,40}$ 

jednak nie dostanę mecz przeciwko tej regex:

^(?:;(\d{0,19})\?.){3,40}$ 

Jedyną rzeczą Zmieniam się to minimalna długość, z której oba dane wejściowe powinny spełniać. Dlaczego pierwszy odnajdzie zapałkę, a drugi nie? Może po prostu nie rozumiem tego kwantyfikatora, ale myślałem, że to po prostu {MIN, MAX}.

Również ja testowałem to w obu następujących testerów online:

regular-expressions.info

regexpal.com

+2

Nie zmieniasz minimalnej długości, ale liczby powtórzeń wzoru '(?:; (\ D {0,19}) \?) dodatkowy znak). –

Odpowiedz

7

Z pierwszej części wypowiedzi ^(?:;(\d{0,19})\?.) jesteś dopasowanie wszystkich tych ;123?T.

Z następną częścią wyrażenia {1,40} mówisz, że pasujesz do powyższego od 1 do 40 razy. Zauważ, że jeśli spróbujesz trzy razy z rzędu dopasować ;123?T, to oczywiście nie zadziała, i tak jest w przypadku, gdy mówisz {3,40}.

+3

drugie wyrażenie regularne będzie pasować do czegoś takiego:; 123? T; 456? T; 789? T, jeśli to sprawia, że ​​odpowiedź jest bardziej jasna. drugi regex prosi o trzykrotne dopasowanie do całej grupy. – escrafford

+0

niesamowite, dzięki! całkowicie ma sens. – heath

Powiązane problemy