2017-10-27 1 views
1

Ich bin die Suche von Anfang an der Zeichenfolge, aber ich kann nicht herausfinden, wie.Wie zu nicht gierigen Suche von Anfang an

Wenn die Zeichenfolge >plaplapla>plaplapla(321) war, möchte ich den Text mit Regex />.+?\(\d.\)/ beginnend mit dem letzten Vorkommen der ersten char > erhalten.

Zum Beispiel, wenn der Text >fir5t W0rd$ > $ec0nd here(2) >third here() war, ist der Text, den ich extrahieren möchte, > $ec0nd here(2).

Ich habe versucht, das Regix />.+?\(\d.\)/ zu verwenden, aber es gibt mir >fir5t W0rd$ > $ec0nd here(2) anstelle von > $ec0nd here(2).

Wie kann ich das Regix so ändern, dass es von der letzten Position des Auftretens des '>' Zeichens beginnt?

+0

Das geschieht, weil die Zeichenfolge von links nach rechts verarbeitet wird, und sobald das erste '<' angepasst ist, 'das. *?' (Obwohl faul) Spiele bis zu den ersten '(', Ziffern, ')'. So kann es über '<' Symbole übereinstimmen. –

Antwort

2

Da die Zeichenfolge scheint > begrenzt Gebrauch ein [^>] negierte Zeichenklasse statt eines .*? faul Punktmuster zu sein:

/>[^>]+\(\d+\)/ 

die regex demo See. Beachten Sie, dass />[^>]+?\(\d+\)/ ähnlich funktioniert, aber bis zum ersten (<DIGITS>) Teilstring nach dem > übereinstimmen wird. Siehe this regex und the one above.

Einzelheiten

  • > - eine wörtliche >
  • [^>]+-1 oder mehr Zeichen andere als > so viele wie möglich
  • \( - eine wörtliche (
  • \d+ - ein oder mehrere Ziffern
  • \) - ein ) Symbol.
1

Versuchen Sie folgendes:

/>[^>]+?\(\d\)/ 

Auf diese Weise Ihre regex wird den Charakter nicht erfassen >, so dass Sie die zweite Instanz davon bekommen.

Regex 101 Link

+0

\ d + ........... –

Verwandte Themen