615 Stimmen

Regex: Abgleich bis zum ersten Vorkommen eines Zeichens

Ich suche nach einem Muster, das zu allem passt bis das erste Vorkommen eines bestimmten Zeichens, z. B. eines ";" - ein Semikolon .

Ich habe dies geschrieben:

/^(.*);/

Aber es passt tatsächlich alles (einschließlich des Semikolons) bis zum letzten Vorkommen eines Semikolons.

112 Stimmen

/^(.*?);/ sollte auch funktionieren (es heißt nicht gierig ), aber die gegebenen Antworten mit [^;]* sind besser.

0 Stimmen

Wie würden Sie alles nach dem Semikolon und nicht das Semikolon selbst auswählen?

0 Stimmen

Siehe diese Arbeiten \w+(?!([^]+;)|;) aber dies nicht, warum? .+(?!([^]+;)|;)

15voto

poncius Punkte 111

Beispieltext:

"this is a test sentence; to prove this regex; that is g;iven below"

Wenn wir zum Beispiel den obigen Beispieltext haben, wird die Regex /(.*?\;)/ gibt Ihnen alles bis zum ersten Vorkommen des Semikolons ( ; ), einschließlich des Semikolons: "this is a test sentence;"

3 Stimmen

Es ist nicht notwendig zu entkommen ; char, weil es kein Regex-Sonderzeichen ist. Gruppierung () ist ebenfalls nicht erforderlich. Sie können gehen mit /.*?;/

1 Stimmen

Ja, Sie haben recht. Die Flucht war eher nach dem Motto "Vorsicht ist besser als Nachsicht".

2 Stimmen

Das ist die Antwort, die ich gesucht habe. Das ? bewirkt also, dass das Spiel beim ersten Auftreten endet? Wie lautet der Name dieser... (nennen wir sie) Eigenschaft der Regex?

12voto

Skilldrick Punkte 66961

Versuchen Sie /[^;]*/

Das ist eine Verneinung Charakterklasse .

7voto

Yardboy Punkte 2767

Dies war sehr hilfreich für mich, als ich versuchte, herauszufinden, wie man alle Zeichen in einem Xml-Tag einschließlich der Attribute abgleichen kann. Ich war in die "passt alles bis zum Ende" Problem mit laufen:

/<simpleChoice.*>/

konnte aber das Problem mit lösen:

/<simpleChoice[^>]*>/

nachdem ich diesen Beitrag gelesen habe. Danke an alle.

1 Stimmen

Ich hatte herausgefunden, dass es viel effizienter ist, html/xml zu parsen (jede Sprache oder jedes Framework hat seine eigenen Klassen dafür), weil es ein maschinelles Format ist, Regexs sind für natürliche Sprache.

1 Stimmen

Sehr schön. Ich habe dies verwendet, um Xml-Dokumente mit Syntaxfehlern in <!DOCTYPE> Tag. Da der Parser nicht in der Lage war, es zu verarbeiten.

5voto

ghostdog74 Punkte 305138

Dies ist keine Regex-Lösung, aber etwas, das für Ihre Problembeschreibung einfach genug ist. Teilen Sie einfach Ihre Zeichenfolge und erhalten Sie das erste Element aus Ihrem Array.

$str = "match everything until first ; blah ; blah end ";
$s = explode(";",$str,2);
print $s[0];

Ausgabe

$ php test.php
match everything until first

5voto

mchid Punkte 1460

Dies gilt nur für das erste Vorkommen in jeder Zeichenkette und ignoriert alle weiteren Vorkommen.

/^([^;]*);*/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X