Ich suche nach einem Muster, das bis zum ersten Auftreten eines bestimmten Zeichens zu allem passt , z. B. ";" - ein Semikolon .
Ich habe das geschrieben:
/^(.*);/
Aber es stimmt tatsächlich mit allem (einschließlich des Semikolons) bis zum letzten Auftreten eines Semikolons überein.
/^(.*?);/
sollte auch funktionieren (es heißt nicht gierig ), aber die gegebenen Antworten[^;]*
sind besser.\w+(?!([^]+;)|;)
aber warum nicht?.+(?!([^]+;)|;)
Antworten:
Du brauchst
Das
[^;]
ist eine Zeichenklasse , es passt zu allem außer einem Semikolon.Um die
perlre
Manpage zu zitieren :Dies sollte in den meisten Regex-Dialekten funktionieren.
quelle
foo=bar;baz=bax;bab=baf
übereinstimmt , z. B. in meinem Fall, und es stimmtbab=baf
sogar überein , dass es nicht;
genau das gibt, was ich brauche. IchWürde;
Arbeit?
Das
?
ist ein fauler Operator, daher greift der Regex so wenig wie möglich, bevor er mit dem übereinstimmt;
.quelle
/^[^;]*/
Das [^;] sagt, dass alles außer einem Semikolon übereinstimmt. Die eckigen Klammern sind ein Satzübereinstimmungsoperator. Sie stimmen im Wesentlichen mit jedem Zeichen in diesem Zeichensatz
^
überein. Am Anfang ist dies eine umgekehrte Übereinstimmung. Stimmen Sie also mit allem überein, was nicht in diesem Satz enthalten ist.quelle
Versuchen
/[^;]*/
Google
regex character classes
für Details.quelle
Versuchen
/[^;]*/
Das ist eine negierende Charakterklasse .
quelle
Beispieltext:
Wenn wir zum Beispiel den obigen Beispieltext haben,
/(.*?\;)/
gibt Ihnen der reguläre Ausdruck alles bis zum ersten Auftreten von Semikolon (;
), einschließlich des Semikolons:"this is a test sentence;"
quelle
;
char zu entkommen, da es sich nicht um ein Regex-Sonderzeichen handelt. Eine Gruppierung()
ist ebenfalls nicht erforderlich. Sie können mit gehen/.*?;/
?
Charakter macht das Match faul (Matching so oft wie möglich). Denken Sie an die Regex-passenden Zeichen bis zum ersten Semikolon, dann geht es nicht weiter, weil es aufgibt (faul;))Dies ist keine Regex-Lösung, sondern etwas, das für Ihre Problembeschreibung einfach genug ist. Teilen Sie einfach Ihre Zeichenfolge und holen Sie sich das erste Element aus Ihrem Array.
Ausgabe
quelle
Dies war sehr hilfreich für mich, als ich versuchte herauszufinden, wie alle Zeichen in einem XML-Tag einschließlich Attributen übereinstimmen. Ich bin auf das Problem "passt alles bis zum Ende" gestoßen mit:
konnte das Problem jedoch beheben mit:
nach dem Lesen dieses Beitrags. Vielen Dank an alle.
quelle
<!DOCTYPE>
Tag zu beheben . Da Parser nicht damit umgehen konnte.Dies stimmt nur mit dem ersten Vorkommen in jeder Zeichenfolge überein und ignoriert nachfolgende Vorkommen.
quelle
"/^([^\/]*)\/$/"
arbeitete für mich, um nur Top "Ordner" aus einem Array wie:quelle
Wirklich ein bisschen traurig, dass dir niemand die richtige Antwort gegeben hat ...
In Regex? macht es nicht gierig. Standardmäßig stimmt der reguläre Ausdruck so gut wie möglich überein (gierig)
Einfach ein hinzufügen? und es wird nicht gierig sein und so wenig wie möglich passen!
Viel Glück, hoffe das hilft.
quelle
ich habe das gefunden
funktioniert gut.
',' hier der "Begrenzer" sein.
quelle