2016-04-25 7 views
4

Diese früheren (ähnlich) Frage von mir Search for multiple strings in several files with Sublime 3 war answered mit einer Art und Weise für mehrere Strings in mehreren Dateien in Sublime Text zu suchen, den Regex OR Operator:Suche nach mehreren Strings in mehreren Dateien mit Sublime 3 mit AND

Find: (string1|string2) 
Where: <open folders> 

Dies funktioniert perfekt für die Suche nach Dateien, wo entwederstring1 OR string2 vorhanden ist. Was ich jetzt brauche, ist in vielen Dateien für beide Zeichenfolgen vorhanden suchen. Das heißt, ich muss den Operator AND verwenden.

sah ich mich um diese Frage Regular Expressions: Is there an AND operator? und auch dieses Regex AND operator und kam mit den folgenden Rezepten bis:

(?=string1)(?=string2) 
(?=.*string1)(?=.*string2) 
(string1 string2) 
(string1\&string2) 

aber keiner von ihnen arbeiten.

Die Frage ist also: Wie kann ich mehrere Strings in mehreren Dateien gleichzeitig mit SublimeText suchen?

(Ich verwende Sublime Text 3103)

hinzufügen: die Saiten sind nicht unbedingt in der gleichen Zeile. Sie können sich irgendwo in jeder Datei befinden. Zum Beispiel diese Datei:

string1 dfgdfg d dfgdf 

sadasd 
asdasd 

dfgdfg string2 dfgdfg 

sollte eine Übereinstimmung auslösen.

+0

tatsächlich war es das vorherige Spiel, das highlighting..its nicht für mich arbeitet entweder war. .it nur in der aktuellen Datei finden – rock321987

+0

Drücken Sie 'Shift + Ctrl + F' und geben Sie die Regex .. Es ist richtig in dort finden – rock321987

+0

Welche Regex? Welche Dateien verwenden Sie, um dies zu testen? – Gabriel

Antwort

6

öffnen erhabener Text und drücken

Umschalt +Ctrl +F

oder klicken Sie auf die Find in Files Optionen unter Files Registerkarte. Oben ist eine Tastenkombination für diese Option. Wenn Sie oben-Taste drücken, das sind folgende Optionen

enter image description here

Wenn Sie wählen ... Knopf von oben, erhalten Sie 6 Optionen, die

Add Folder oder Add Open Files oder Add Open Folders sind Strings zu suchen, treten in der gleichen Zeile

Verwenden Sie die folgende regex für Ihre and Betrieb

(?=.*string1)(?=.*string2) 

Ich bin mit dem folgenden regex

(?=.*def)(?=.*s)\w+ <-- \w+ will help in understanding which line is matched(will see later) 

und ich bin auf der Suche innerhalb current open files

enter image description here

Sicherstellen, dass die Use Buffer Option aktiviert ist (ein kurz vor Find).Es zeigt die Übereinstimmungen in einer neuen Datei an. Stellen Sie außerdem sicher, dass die Option Show Context (eine Option kurz vor Use Buffer) aktiviert ist. Dies zeigt die genaue übereinstimmende Linie an. Jetzt klicken Sie auf Find auf der rechten Seite. Hier

ist die Ausgabe erhalte ich

enter image description here

Sehen Sie den Unterschied in Hintergrundfarbe der Linie 1315 und 1316 (erscheint in der linken Seite). 1316 wird abgestimmt Linie in designation Datei

Dies ist das Bild des letzten Teils

enter image description here

Es 6 Dateien insgesamt waren die geöffnet wurden, während ich diese Regex verwendet

Für Strings überall in der Datei zu finden,

Verwenden

(?=[\s\S]*string1)(?=[\s\S]*string2)[\s\S]+ 

aber es wird sublime töten, wenn die Anzahl der Zeilen erhöht wird.

Wenn es nur zwei Worte, die Sie finden müssen, wird die folgende super schnell arbeiten im Vergleich zu oben

(\bstring1\b[\S\s]*\bstring2\b)|(\bstring2\b[\S\s]*\bstring1\b) 
+0

Nach welchen zwei Strings suchen Sie mit der Regex '(? =. * Def) (? =. * S)'? – Gabriel

+0

@Gabriel Ja, ich suche nach String 'def' und String' s' – rock321987

+0

Versuchen Sie in der folgenden Mock-Datei http://pastebin.com nach '(? =. * String1) (? =. * String2)' zu suchen/Tq6YJUfC Es wird nicht funktionieren und es sollte. Ich bin mir nicht sicher, was deine Linie macht, aber es ist nicht das, was ich brauche. – Gabriel