Mein Regex-Muster sieht ungefähr so aus
<xxxx location="file path/level1/level2" xxxx some="xxx">
Ich interessiere mich nur für den Teil in Anführungszeichen, die dem Standort zugeordnet sind. Sollte es ohne den gierigen Schalter nicht so einfach sein wie unten?
/.*location="(.*)".*/
Scheint nicht zu funktionieren.
Antworten:
Sie müssen Ihren regulären Ausdruck nicht gierig machen, da standardmäßig
"(.*)"
alle übereinstimmen"file path/level1/level2" xxx some="xxx"
.Stattdessen können Sie Ihren Punktstern nicht gierig machen, wodurch er so wenig Zeichen wie möglich entspricht:
Hinzufügen eines
?
auf einem Quantor (?
,*
oder+
) macht es nicht gierig.quelle
.*?
es ist.\{-}
für eine nicht gierige Spiel.location="(.*)"
wird von "nachlocation=
bis" nachher übereinstimmensome="xxx
, es sei denn, Sie machen es nicht gierig. So müssen Sie entweder.*?
(dh es nicht gierige) oder besser ersetzen.*
mit[^"]*
.quelle
.*?
Notation ist allgemeiner als[^"]*
Wie wäre es mit
Dies vermeidet die unbegrenzte Suche mit. * Und stimmt genau mit dem ersten Zitat überein.
quelle
Verwenden Sie nicht gieriges Matching, wenn Ihr Motor dies unterstützt. Ergänzen Sie die ? innerhalb der Aufnahme.
quelle
Die Verwendung von Lazy-Quantifizierern
?
ohne globales Flag ist die Antwort.Z.B,
Wenn Sie dann ein globales Flag hätten
/g
, hätte es mit allen Übereinstimmungen mit der niedrigsten Länge wie unten übereinstimmen können.quelle
Da Sie ein quantifiziertes Untermuster verwenden und wie in Perl Doc beschrieben ,
Um Ihrem quantifizierten Muster eine minimale Übereinstimmung zu ermöglichen, gehen Sie folgendermaßen vor
?
:quelle
Hier ist ein anderer Weg.
Hier ist der, den du willst. Das ist faul
[\s\S]*?
Der erste Punkt:
[\s\S]*?(?:location="[^"]*")[\s\S]*
Ersetzen durch:$1
Erklärung : https://regex101.com/r/ZcqcUm/2
Der Vollständigkeit halber erhält dies den letzten. Das ist gierig
[\s\S]*
Der letzte Punkt:
[\s\S]*(?:location="([^"]*)")[\s\S]*
Ersetzen durch:$1
Erklärung : https://regex101.com/r/LXSPDp/3
Es gibt nur einen Unterschied zwischen diesen beiden regulären Ausdrücken und das ist der
?
quelle