2012-11-11 19 views

Odpowiedz

8

Powodem, że nie pasuje do drugiego elementu jest to, że przestrzeń pomiędzy 18 i 19 jest spożywane przez spływu \s+ pierwszego meczu. należy dokonać zakaz spożywania zerowej szerokości regexp dla spływu puste, na przykład za pomocą składni uprzedzoną lub tokena dla zerowej szerokości granicy:

\s+\d\d(?=\s+) 
+0

Przyjemne objaśnienie +1 dla wpisu. –

5

Użyj tego zamiast:

\b\d\d\b 

Twój regex nie jest dopasowanie drugą liczbę, ponieważ pierwszy mecz już „zjedzony” wszystkie przestrzenie.

Tymczasem \b to "granica słowa" i to, co jest znane jako znak o zerowej szerokości (meta-): nie "zjada" niczego podczas dopasowywania.

+0

niesamowite. Ciekawi mnie jednak, dlaczego \ b nie zjada spacji, podczas gdy \ s robi to? – David

+0

@David - Zobacz edycję. Jest to jeden z kilku konstruktów regex, które mają zerową szerokość. Innym godnym uwagi byłoby wyprzedzanie, które mogłeś również wykorzystać: '\ s + \ d \ d (? = \ S)'. –

+0

uwaga, że ​​przechwyciłoby to również dwie cyfry na końcu, jeśli istnieje jakakolwiek – Anirudha

3

Ponieważ pierwszym parsowaniem wyników do "18" i pozostałego ciągu jest "19 Tekst", który nie jest zgodny.

Powiązane problemy