Die anderen Antworten hier setzen voraus, dass Sie eine Regex-Engine haben, die Non-Greedy-Matching unterstützt. Dies ist eine Erweiterung, die in Perl 5 eingeführt und in andere moderne Sprachen übernommen wurde; sie ist aber keineswegs allgegenwärtig.
Viele ältere oder konservativere Sprachen und Editoren unterstützen nur traditionelle reguläre Ausdrücke, die keinen Mechanismus zur Kontrolle der Gierigkeit des Wiederholungsoperators haben *
- wird immer die längste mögliche Zeichenkette gefunden.
Der Trick besteht also darin, das zu begrenzen, was er überhaupt abgleichen darf. Anstelle von .*
Sie scheinen zu suchen
[^>]*
die immer noch mit so vielen der etwas wie möglich; aber die etwas ist nicht nur .
"jedes Zeichen", sondern "jedes Zeichen, das nicht >
".
Je nach Anwendung kann es sinnvoll sein, eine Option zu aktivieren, die "beliebige Zeichen" einschließlich Zeilenumbrüchen zulässt.
Selbst wenn Ihre Engine für reguläre Ausdrücke eine nicht-gierige Suche unterstützt, ist es besser, genau zu sagen, was Sie eigentlich meinen. Wenn dies です was Sie meinen, sollten Sie dies wahrscheinlich sagen, anstatt sich auf eine nicht gierige Übereinstimmung zu verlassen, um (hoffentlich, wahrscheinlich) zu tun, was ich meine.
Ein regulärer Ausdruck mit einem nachgestellten Kontext nach dem Platzhalter wie z. B. .*?><br/>
überspringt jede verschachtelte >
bis es den hinteren Kontext findet (hier, ><br/>
), auch wenn dies die Überwindung mehrerer >
Instanzen und Zeilenumbrüche, wenn Sie es zulassen, wobei [^>]*><br/>
(oder sogar [^\n>]*><br/>
wenn Sie den Zeilenumbruch explizit verbieten müssen) kann und will das natürlich nicht tun.
Natürlich ist das immer noch nicht das, was Sie wollen, wenn Sie sich mit <img title="quoted string with > in it" src="other attributes"> and perhaps <img title="nested tags">
aber an diesem Punkt sollten Sie es endgültig aufgeben, reguläre Ausdrücke dafür zu verwenden, wie wir es Ihnen alle von Anfang an gesagt haben.