2016-09-05 4 views
1

im regex zu lernen beginnen, und ich versuchte, eine einfache regex zu machen, die nicht sinnvoll übereinstimmt machen, aber es abgestimmt jede mögliche Weise ich in Python versuchtregex, die nicht funktionieren sollte funktioniert

import re 


pattern = r'[a-z]+[a-z]' 



print re.findall(pattern,"adasdasad"); 

es zurück ['adasdasad'] wo sollte es nicht funktioniert haben, weil [az] + sollte die ganze Zeichenfolge verbraucht haben und der Rest ([az]) wird nichts zu conusme finden, warum es auswertet ????

+0

Nein, weil '+' kein * Possessivquantifizierer * ist. –

+0

Sie können Ihre Regex hier testen - https://regex101.com/ –

+3

'+' konsumiert nicht die ganze Zeichenfolge, es verbraucht so viel wie möglich. Das ist ein großer Unterschied. –

Antwort

5

Der + ist kein Possessivquantifizierer und ermöglicht das Zurückverfolgen in das quantifizierte Untermuster.

Die [a-z]+ Spiele adasdasa und [a-z] Matches d finden this demo.

enter image description here

BTW, verwendet, wenn Sie [a-z]++[a-z] mit PCRE (ein Muster mit einem besitzergreifend quantifier ++), wäre es nie etwas passen, wie es 1 oder mehr Buchstaben passen würde erfordern, und dann noch einen Brief, der bereits sein würde, verbraucht mit dem ersten Untermuster. Also, das ist das gleiche wie (?!) Muster.

+0

danke können Sie mehr Informationen über eine Referenz geben, um mehr über diese Dinge zu erfahren – user3809210

+0

Für welches Thema interessieren Sie sich? Im Allgemeinen kann ich vorschlagen, alle Lektionen bei [regexone.com] (http://regexone.com/) zu machen, indem ich [regulary-expressions.info] durchliest (http://www.regular-expressions.info), [ regex SO-Tag-Beschreibung] (http://stackoverflow.com/tags/regex/info) (mit vielen anderen Links zu großartigen Online-Ressourcen), und der Community-SO-Beitrag namens [Was bedeutet der Regex?] (http: // stackoverflow .com/questions/22937618/referenz-was-tut-das-regex-gemein). A [rexegg.com] (http://rexegg.com) ist auch eine großartige Seite. –

Verwandte Themen