Regex zu finden, zwei Wörter auf der Seite
Ich versuche zu finden, alle Seiten, die die Suchbegriffe enthalten, "text1" und "text2".
Meine regex:
text1(.|\n)*text2
funktioniert es nicht..
- Versuchen
text1(.|\s)*text2
- Seiten, die beide Instanzen auf der gleichen Linie oder einfach die gleiche Datei?
- Ich denke das Beispiel macht klar, dass es über mehrere Zeilen
- Sie können auch feststellen, dass IDEs verwenden Sie '\r' anstelle von (oder zusätzlich zu) '\n', also (.|[\r\n]) kann nützlich sein, an Orten, die (.|\n) möglicherweise fehl.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihre IDE unterstützt die
s
(single-line) fahne (also die.
Charakter kann match newlines), können Sie die Suche für Ihre Objekte mit:Beispiel mit
s
- flagWenn die IDE nicht unterstützt
s
Flagge, die Sie benötigen, um[\s\S]
im Ort.
:Beispiel mit
[\s\s]
Einige Sprachen verwenden
$1
und$2
im Ort\1
und\2
, so müssen Sie möglicherweise zu ändern.EDIT:
Alternativ, wenn Sie wollen einfach übereinstimmen, dass eine Datei enthält sowohl strings (aber eigentlich nicht wählen Sie etwas), Sie nutzen kann look-aheads:
Dieser kümmert sich nicht um das bestellen (oder die Nummer) der Argumente, und für jeden weiteren text, den Sie suchen möchten, Sie einfach anfügen anderen
(?=.*?text_here)
. Dieser Ansatz ist schön, da können Sie sogar mit regex statt einfach nur strings.text1
undtext2
? Ein paar Zeilen? Ein paar Absätze? Einen am oberen und einen am unteren Rand des Dokuments? Verwenden Sie*?
statt*
?Versuchen.Dies sollte es tun für Sie.
Was dieser tut, ist das match auch mehrzeilig .ähnlich wie mit
.*?
mits
Flagge.\s
kümmert sich umspaces,newlines,tabs
\S
kümmert sich um alle nicht Leerzeichen.Wenn Sie möchten, dass die regex-match über mehrere Zeilen, die ich versuchen würde:
Mit
.
ist nicht eine gute Wahl, weil es in der Regel nicht entsprechen, die über mehrere Zeilen. Auch für die passende single-Zeichen, ich glaube mit eckigen Klammern ist mehr idiomatische als mit( ... | ... )
Wenn Sie möchten, dass das match zu werden, um-unabhängig, dann verwenden Sie diesen:
Hinzufügen einer Antwort für IntelliJ
Gebäude auf @OnlineCop Antwort, vertauschen die Reihenfolge der beiden Ausdrücke in IntelliJ,würden Sie den Stil der Suche, wie in der akzeptierten Antwort, aber da IntelliJ nicht zulässt, dass eine Online-version, die Sie haben, um die replace-Anweisung in einem separaten Feld. Auch, IntelliJ verwendet
$
zu identifizieren Ausdrücke anstelle von\
.Zum Beispiel, Neige ich dazu, meine
null
s am Ende meiner Vergleiche, aber einige Leute bevorzugen es sonst. Also, um die Dinge konsequent zu arbeiten, habe ich diese regex Muster, um ein vertauschen der Reihenfolge der Vergleiche:Beachten Sie, dass IntelliJ zeigt in einem tooltip angezeigt, was das Ergebnis der Ersetzung wird.