Czy mogę uzyskać przykład różnic między tymi trzema elementami (czy są to tak zwane metaznaki?)?
Wiem, że *
to znaczy wszystko albo nic, ale nie jestem pewien, czy to właściwy sposób, aby o tym myśleć. Z drugiej strony .
i ?
wydają się takie same. Pasują do jednej postaci, prawda?
Odpowiedzi:
Zaczerpnięte z Wikipedii :
Duża różnica polega na tym, że gwiazdka odpowiada zeru lub większej liczbie wystąpień, podczas gdy znak zapytania odpowiada zeru lub jednemu wystąpieniu. Porównaj te dwa przykłady:
Ponieważ w
colouur
literze u (poprzedni element przed kwalifikatorem?
) wystąpił więcej niż jeden raz, nie jest to zgodne z?
, ale jest dopasowane z*
Podobny przykład:
Z tej samej strony Wikipedii:
W naszym przykładzie
Właściwie ostatni z nich brzmi:
match any line that has "colou", plus any character, plus letter "r"
Wniosek
Zapytałeś: „Wiem, że„ * ”oznacza wszystko albo nic, ale nie jestem pewien, czy to właściwy sposób myślenia o tym. Z drugiej strony”. I „?” wydaje się to samo. ” Jak widać kropka i gwiazdka nie są dokładnie takie same. Kropka działa na dowolny znak, który może zajmować tę konkretną pozycję, podczas gdy znak zapytania działa na poprzednim elemencie.
źródło
Możesz mylić wyrażenia regularne z globusami powłoki
W składni wyrażeń regularnych
.
reprezentuje dowolny pojedynczy znak (zwykle wykluczając znak nowej linii), podczas gdy*
jest kwantyfikatorem oznaczającym zero lub więcej poprzedniego wyrażenia regularnego (znak lub grupa).?
jest kwantyfikatorem oznaczającym zero lub jedną instancję poprzedniego atomu, lub (w wariantach wyrażeń regularnych, które go obsługują) modyfikatorem, który ustawia zachowanie kwantyfikatora na niechciane.W globusach powłoki
?
reprezentuje pojedynczy znak (podobnie jak regex.
), podczas gdy*
reprezentuje sekwencję zero lub więcej znaków (odpowiednik regex.*
).Kilka odnośników, które mogą ci się przydać, to http://www.regular-expressions.info/quickstart.html i http://mywiki.wooledge.org/glob
źródło
Uwaga:
Examples provided are in Python.
Choć koncepcja pozostaje taka sama.'.'
jest pasującym symbolem, który pasuje do dowolnego znaku z wyjątkiem znaku nowej linii (to też można zastąpićre.DOTALL
argumentem w Pythonie). Dlatego jest również nazywany symbolem wieloznacznym .'*'
jest kwantyfikatorem (określa, jak często może wystąpić element). Jest skrótem od {0,} .Oznacza „dopasuj zero lub więcej” - grupa poprzedzająca gwiazdę może występować dowolną liczbę razy w tekście. Może być całkowicie nieobecny lub powtarzany w kółko.
'?'
jest także kwantyfikatorem . Jest skrótem od {0,1} .Oznacza to „Dopasuj zero lub jedną z grup poprzedzających ten znak zapytania”. Można to również zinterpretować, ponieważ część poprzedzająca znak zapytania jest opcjonalna .
na przykład:
W powyższym przykładzie „?” oznacza, że dwie poprzedzające ją cyfry są opcjonalne. Mogą się nie pojawić lub wystąpić jednorazowo.
Różnica pomiędzy '.' i '?':
'.'
dopasowuje / akceptuje / weryfikuje dowolny pojedynczy znak dla miejsca, które zajmuje w wyrażeniu regularnym.na przykład:
'?'
dopasowuje / weryfikuje zerowe lub pojedyncze wystąpienie grupy poprzedzającej .Sprawdź przykład numeru telefonu komórkowego.
To samo dotyczy
'*'
. Sprawdza zero lub więcej wystąpień grupy poprzedzającej .Połączenie:
'.*'
: Akceptuje tyle sekwencji, ile jest dostępnych. Chciwe podejście .'.*?
„Akceptuje pierwszą dopasowaną sekwencję i zatrzymuje się. Nie chciwe podejścieAby uzyskać więcej informacji, przeczytaj poniższe dwa pytania ...
źródło