Könnte ich ein Beispiel dafür bekommen, wie sich diese drei Elemente (heißen sie Metazeichen?) Unterscheiden?
Ich weiß, dass *
das alles oder nichts bedeutet, aber ich bin nicht sicher, ob es der richtige Weg ist, darüber nachzudenken. Auf der anderen Seite .
und ?
scheinen gleich. Sie stimmen mit einem Charakter überein, oder?
Antworten:
Direkt aus Wikipedia entnommen :
Der große Unterschied besteht darin, dass das Sternchen mit null oder mehr Vorkommen übereinstimmt, während das Fragezeichen mit null oder einem Vorkommen übereinstimmt . Vergleichen Sie diese beiden Beispiele:
Da in
colouur
dem Buchstaben u (dem vorherigen Element vor dem Qualifikationsmerkmal?
) mehrmals vorgekommen?
ist, stimmt das nicht mit überein , aber es stimmt mit überein*
Ähnliches Beispiel:
Von der gleichen Wikipedia-Seite:
In unserem Beispiel
Passenderweise lautet der letzte als
match any line that has "colou", plus any character, plus letter "r"
Fazit
Sie haben gefragt: "Ich weiß, dass '*' alles oder nichts bedeutet, aber ich bin mir nicht sicher, ob es der richtige Weg ist, darüber nachzudenken. Auf der anderen Seite". & '?' scheinen gleich. " Wie Sie sehen, sind der Punkt und der Stern nicht genau gleich. Der Punkt wirkt auf jedes Zeichen, das diese bestimmte Position einnimmt, während das Fragezeichen auf das vorhergehende Element wirkt.
quelle
Möglicherweise verwechseln Sie reguläre Ausdrücke mit Shell-Globs
In regulären Ausdrücken steht die Syntax
.
für ein einzelnes Zeichen (normalerweise ohne das Newline-Zeichen), während sie*
ein Quantifizierer ist , der null oder mehr des vorhergehenden Regex-Atoms (Zeichen oder Gruppe) bedeutet.?
ist ein Quantifizierer, der null oder eine Instanz des vorhergehenden Atoms bedeutet, oder (in Regex-Varianten, die dies unterstützen) ein Modifizierer , der das Quantifiziererverhalten auf nicht gierig setzt.Stellt in Shell-Globs
?
ein einzelnes Zeichen (wie die Regex.
) dar, während*
eine Folge von null oder mehr Zeichen (entspricht Regex.*
) dargestellt wird.Einige nützliche Referenzen sind http://www.regular-expressions.info/quickstart.html und http://mywiki.wooledge.org/glob
quelle
Hinweis: Das
Examples provided are in Python.
Konzept bleibt jedoch dasselbe.'.'
ist ein übereinstimmendes Symbol, das mit jedem Zeichen außer dem Zeilenumbruchzeichen übereinstimmt (dies kann auch mitre.DOTALL
Argumenten in Python überschrieben werden ). Daher wird es auch als Wildcard bezeichnet .'*'
ist ein Quantifizierer (definiert, wie oft ein Element vorkommen kann). Ist die Abkürzung für {0,} .Es bedeutet "Keine oder mehr Treffer" - die Gruppe vor dem Stern kann beliebig oft im Text vorkommen. Es kann ganz fehlen oder immer wieder wiederholt werden.
'?'
ist auch ein Quantifizierer . Ist die Abkürzung für {0,1} .Es bedeutet "Keine Übereinstimmung mit oder eine Übereinstimmung mit der Gruppe vor diesem Fragezeichen".Es kann auch so interpretiert werden, dass der Teil vor dem Fragezeichen optional ist .
z.B:
Im obigen Beispiel '?' Gibt an, dass die beiden vorangestellten Ziffern optional sind. Sie dürfen nicht oder höchstens einmal vorkommen.
Unterschied zwischen '.' und '?':
'.'
passt / akzeptiert / überprüft einem einzelnen Zeichen für die Stelle, an der es sich im regulären Ausdruck befindet.z.B:
'?'
Stimmt mit dem Null- oder Einzelvorkommen der Gruppe überein oder überprüft es .Überprüfen Sie das Beispiel für eine Mobiltelefonnummer.
Gleiches gilt für
'*'
. Es werden null oder mehr Vorkommen der vorhergehenden Gruppe überprüft .Kombination:
'.*'
: Akzeptiert so viele Sequenzen wie verfügbar. Gieriger Ansatz .'.*?
'Akzeptiert die erste übereinstimmende Sequenz und stoppt. Nicht gieriger AnsatzWeitere Informationen finden Sie in den folgenden zwei Fragen ...
quelle