webentwicklung-frage-antwort-db.com.de

Eclipse, Suche nach regulären Ausdrücken und Ersetzen

Ist es in Eclipse möglich, die übereinstimmende Suchzeichenfolge als Teil der Ersetzungszeichenfolge zu verwenden, wenn ein regulärer Ausdruck gesucht und ersetzt wird?

Grundsätzlich möchte ich alle Vorkommnisse von ersetzen

variableName.someMethod()

mit:

((TypeName)variableName.someMethod())

Dabei kann variableName ein beliebiger Variablenname sein.

In sed könnte ich so etwas verwenden:

s/[a-zA-Z]+\.someMethod\(\)/((TypeName)&)/g

Das heißt, & steht für die übereinstimmende Suchzeichenfolge. Gibt es etwas Ähnliches bei Eclipse?

Vielen Dank!

108
Dan

Ja, "()" erfasst eine Gruppe. Sie können es erneut mit $ i verwenden, wo ich die i'th-Capture-Gruppe ist.

so:

search: (\w+\.someMethod\(\))
replace: ((TypeName)$1)

tipp: STRG + Leerzeichen in den Textfeldern enthält alle möglichen Vorschläge für das Schreiben von regulären Ausdrücken. (Ich fürchte, die Abwärts-Taste, um die Liste der Vorschläge durchzublättern, löscht Ihre Eingabe im Textfeld. Irritierender Fehler

211
NomeN

Verwendung von ...
Suche = (^. * import) (. *) (\ (. * \) :)
ersetzen = $ 1 $ 2

... ersetzt ...

from checks import checklist(_list):

...mit...

from checks import checklist



Blöcke in Regex sind durch Klammern (ohne vorangestelltes "\" gekennzeichnet)

(^. * import) findet "from checks import" und lädt es in $ 1 (Eclipse beginnt bei 1 zu zählen)

(. *) finde das nächste "alles" bis zum nächsten gefundenen "(") und lädt es auf $ 2. $ 2 stoppt bei "(" wegen des nächsten Teils (siehe nächste Zeile unten)

(\ (. * \) :) sagt "beim ersten Auffinden" ("nach dem Startblock $ 2 ... stop Block $ 2 und Start $ 3. $ 3 wird mit dem" ('any text'): "oder geladen , im Beispiel die "(_list):"

Dann setzen Sie beim Ersetzen einfach die $ 1 $ 2 ein, um alle drei Blöcke durch die ersten beiden zu ersetzen. 



Screenshot

6
RightmireM

NomeN hat richtig geantwortet, aber diese Antwort wäre für Anfänger wie mich nicht von großem Nutzen, da wir ein anderes Problem haben werden, und wir wissen nicht, wie man RegEx dort einsetzt. Ich füge also ein wenig Erklärung hinzu. Die Antwort ist

suche: (\ w + \. someMethod\(\)) 

ersetzen Sie: ((TypeName) $ 1)

Hier:

Auf der Suche:

  • Erstes und letztes '(' ')' zeigt eine Gruppe in Regex

  • '\ w' zeigt Wörter (alphanumerisch + Unterstrich)

  • '+' stellt eine oder mehrere dar (dh eine oder mehrere alphanumerische Zeichen + Unterstrich)

  • '.' ist ein Sonderzeichen, das ein beliebiges Zeichen darstellt (dh. + bedeuteteines oder mehrere Zeichen). Weil dies ein Sonderzeichen istzu ein '.' wir sollten ein Fluchtzeichen angeben, dh '.'

  • 'someMethod' wird angegeben, da gesucht werden soll.

  • Die beiden Klammern '(', ')' werden zusammen mit dem Escape-Zeichen .__ angegeben, da es sich um Sonderzeichen handelt, die zur Darstellung einer Gruppe verwendet werden

Anstelle von:

  • Es wird '((TypeName) $ 1)' gegeben, hier repräsentiert $ 1 diegroup. Dies sind alle Zeichen, die in der ersten Und letzten Klammer '(', ')' im Suchfeld eingeschlossen sind

  • Stellen Sie außerdem sicher, dass Sie die Option 'Regulärer Ausdruck' in Aktiviert haben. Suchen Sie ein Ersetzungsfeld

Weitere Informationen zu RegEx finden Sie unter http://regexr.com/ .

3
padippist

Zumindest bei STS (SpringSource Tool Suite) sind die Gruppen von 0 beginnend nummeriert

replace: ((TypeName)$0)
2
Yaroslav Lyakh

Für jemanden, der eine Erklärung und ein Beispiel für die Verwendung von regx für Eclipse benötigt, hoffen wir, dass dies nützlich ist. Hier ist mein Problem.

enter image description here

Ich möchte umbenennen

/download.mp4^lecture_id=271

zu 

/271.mp4

Und davon kann es viele geben.

Wie solltest du das machen?.

enter image description here

Klicken Sie dann auf Suchen/Ersetzen

0
MadNik

Ich habe nach Regex gesucht, um Leerzeichen in der Leerzeile zu entfernen. Hier ist die Regex zu finden:

^\s *\r?\n

und durch ersetzen 

\ n

Verwenden Sie dies einfach im Assistenten zum Suchen und Ersetzen, es funktioniert zu 100%.

0