Weźmy ciąg
aaaab
i zobaczyć, jak poniższe Wyrażenia regularne dopasować go:
Regex Submatches
group 1 group 2 group3
(a?)(a*)(ab) a aa ab
(a??)(a*)(ab) aaa ab
(a?+)(a*)(ab) a aa ab
(a*)(a?)(ab) aaa ab
(a*?)(a?)(ab) aaa ab
(a*+)(a?)(ab) aaaa <Match fails!>
(a+)(a*)(ab) aaa ab
(a+?)(a*)(ab) a aa ab
(a++)(a*)(ab) aaaa <Match fails!>
Objaśnienie:
a?
próbuje dopasować jedną a
, ale jest przygotowany nic nie pasować, jeśli to konieczne cały mecz odniósł sukces.
a??
stara się niczego nie dopasować, ale jest gotowa dopasować jedną z nich, jeśli jest to konieczne, aby zakończyć cały mecz.
a?+
próbuje dopasować jeden a
. Jeśli może to zrobić, to nie będzie to miało nic wspólnego z niczym, jeśli było to konieczne, aby mecz zakończył się pomyślnie. Jeśli nie może się równać z a
, to z pewnością nie będzie pasować do niczego.
a*
próbuje dopasować jak najwięcej a
s, ale jest przygotowany do dopasowania mniejszej liczby a
s, nawet nic jeśli to konieczne, aby cały mecz się powiódł.
- próbuje niczego nie dopasować, ale jest przygotowany do dopasowania tak wielu, jak
a
s, co jest absolutnie konieczne, aby cały mecz się powiódł, ale nie więcej.
a*+
próbuje dopasować jak najwięcej a
s jak może.Jeśli może to zrobić, będzie to , a nie z powrotem w dół, aby dopasować mniejszą liczbę a
s, jeśli było to konieczne, aby ogólne dopasowanie się powiodło. Jeśli nie może się równać z pojedynczym a
, to z przyjemnością nie pasuje do niczego.
a+
próbuje dopasować jak najwięcej a
s, ale jest przygotowany do dopasowania mniejszej liczby a
s (ale co najmniej jednej), jeśli jest to konieczne, aby zakończyć cały mecz.
a+?
próbuje dopasować tylko jeden a
, ale jest przygotowany do dopasowania tak wielu, jak a
s, co jest absolutnie konieczne, aby cały mecz się powiódł, ale nie więcej.
a++
próbuje dopasować jak najwięcej a
s jak może. Jeśli może to zrobić, będzie to , a nie z powrotem w dół, aby dopasować mniejszą liczbę a
s, jeśli było to konieczne, aby ogólne dopasowanie się powiodło. Jeśli nie można dopasować nawet pojedynczego a
, wówczas wyrażenie regularne nie działa.
Dlaczego? Ponieważ ktoś gdzieś ich używa? Naprawdę musisz poświęcić czas na przeczytanie dokumentów regex i wypróbować rzeczy za pomocą IRB lub rubular.com, zobaczyć, jak działają i zapamiętać, czego się nauczyłeś na przyszłość. Dużo nauki programowania to eksperymentowanie, aby obserwować efekty niewielkich zmian, nie prosząc ludzi o wyjaśnienie tych rzeczy. –
http://www.regular-expressions.info/possessive.html – Phrogz
@TimPietzcker dzięki tobie za głosowanie na mnie. Nie ma to dla mnie znaczenia, ale głosowanie w dół powoduje blokowanie do "nowych postów" - co wydaje mi się fatalne. Najmniej jestem powiązany z takimi głosami, ale zbyt dużo interweniowałam, gdy lubisz ludzi, którzy mają tak żywą koncepcję, mieć takie koncepcje. Ale niektórzy użytkownicy "SO" od kilku dni widzę o wiele bardziej zainteresowani "głosowaniem w dół" innych, bez znajomości znaczenia pytań. Jest OK, jeśli nie rozumiesz mojego "Posta". Ale kiedy odpowiedź zostanie zaksięgowana, a odpowiedź jest zbyt wyczerpująca, dlaczego nie powrócić do głosowania, która przegłosowała. – DoLoveSky