Ich habe folgenden String und ich möchte den letzten Teil ab Punkt zu strippen. Könnten Sie bitte beraten? Ich bin neu in reg Ausdrücke. .. [abc] [def] [ghi]reg-Ausdruck zum Abschneiden einer Zeichenfolge vom letzten Punkt
Danke, mc
Ich habe folgenden String und ich möchte den letzten Teil ab Punkt zu strippen. Könnten Sie bitte beraten? Ich bin neu in reg Ausdrücke. .. [abc] [def] [ghi]reg-Ausdruck zum Abschneiden einer Zeichenfolge vom letzten Punkt
Danke, mc
Die regexp
Sie brauchen, ist:
(.*?)(?:\.[^.]*)?$
Das regexp
Stück für Stück:
( # start of the first capturing sub-pattern
.* # matches any character, any number of times (zero or more)
? # make the previous quantifier (`*`) not greedy
) # end of the first sub-pattern
(?: # start of the second sub-pattern; it doesn't capture the matching string
\. # matches a dot (.)
[^.]* # matches anything but a dot (.), any number of times (zero or more)
) # end of the second sub-pattern
? # the previous sub-expression (the non-capturing sub-pattern) is optional
$ # matches the end of the string
Wie es funktioniert:
Der erste Teil (.*?)
passt und erfasst alles bis zum letzten Punkt. Das Fragezeichen (?
) macht die Null oder mehr Quantifizierer (*
) nicht gierig. Es ist standardmäßig gierig und aufgrund des zweiten Unterausdrucks muss es optional sein (siehe unten), seine Gierigkeit lässt es mit der gesamten Zeichenfolge übereinstimmen.
Der Spezifizierer ?:
am Anfang des zweiten Untermusters bewirkt, dass er nicht erfasst wird. Die übereinstimmende Teilzeichenfolge wird nicht gespeichert und ist nicht für die weitere Verwendung verfügbar. Das zweite Untermuster enthält \.[^.]*
und entspricht einem Punkt (.
) gefolgt von null oder mehr Zeichen, aber keines davon kann Punkte sein. Es passt nichts, wenn die Eingabezeichenfolge keinen Punkt enthält und die gesamte regexp
nicht übereinstimmt. Deshalb ist es als optional gekennzeichnet, indem Sie es mit einem Fragezeichen (?
) folgen.
Die meisten Tools, die mit regexp
arbeiten, bieten eine Möglichkeit, die erfassten Zeichenfolgen mithilfe von $n
oder \n
als Platzhalter in der Ersetzungszeichenfolge abzurufen und zu verwenden. n
oben ist die Nummer des Erfassungsmusters, gezählt durch seine offene Klammer (
. Da wir nur ein Capturing Sub-Muster haben, sollte die passende Sub-String entweder als $1
oder \1
(oder beide oder mit einer anderen Syntax) verfügbar sein.
Sie können mit diesem regexp
auf regex101.com spielen.
Haben Sie schon etwas probiert? Hinweise: '[^.]' Entspricht anychar außer einem Punkt, und '$' entspricht dem Ende der Eingabe ';)' – sp00m
Geben Sie der Regel keinen Auftrag, wenn Ihre Sprache das kann. Welche Sprache verwendest du? – Bobot
Dies ist ein nützliches Werkzeug, um Regex zu lernen: [regexr] (http://regexr.com) –