Czy w eclipse można użyć dopasowanego ciągu wyszukiwania jako części ciągu zastępującego podczas wyszukiwania i zastępowania wyrażeniem regularnym?
Zasadniczo chcę zastąpić wszystkie wystąpienia
variableName.someMethod()
z:
((TypeName)variableName.someMethod())
Gdzie nazwa zmiennej może w ogóle być nazwą dowolnej zmiennej.
W sedzie mógłbym użyć czegoś takiego:
s/[a-zA-Z]+\.someMethod\(\)/((TypeName)&)/g
Oznacza to, że & reprezentuje dopasowany ciąg wyszukiwania. Czy jest coś podobnego w Eclipse?
Dzięki!
Odpowiedzi:
Tak, „()” przechwytuje grupę. możesz użyć go ponownie z $ i, gdzie i jest i-tą grupą przechwytywania.
Więc:
Wskazówka: znak CTRL+ Spacew polach tekstowych zawiera wszelkiego rodzaju sugestie dotyczące pisania wyrażeń regularnych.
źródło
stringVar.equals("xxx")
z"xxx".equals(stringVar)
. Użyłem następującego wyrażenia regularnego w oknie dialogowym znajdź / zamień:search: ([^()! ]+).equals\("(.*)"\)
,replace: "$2".equals\($1\)
.Używając ...
search = (^. * Import) (. *) (\ (. * \) :)
replace = $ 1 $ 2
... zastępuje ...
...z...
Bloki w wyrażeniu regularnym są otoczone nawiasami (które nie są poprzedzone znakiem „\”)
(^. * Import) wyszukuje „z czeków importu” i ładuje je do $ 1 (zaćmienie zaczyna liczyć od 1)
(. *) Znajdź następny " wszystko "aż do następnego napotkanego" ("i wczytuje to do $ 2. $ 2 zatrzymuje się na" ("z powodu następnej części (zobacz następną linię poniżej)
(\ (. * \) :) mówi" przy pierwszym napotkanym "( "po rozpoczęciu bloku $ 2 ... zatrzymaj blok $ 2 i uruchom $ 3. $ 3 zostanie załadowany za pomocą" ('dowolny tekst'): "lub, w przykładzie," (_list): "
Następnie w zamian, po prostu wstaw 1 $ 2 $, aby zastąpić wszystkie trzy bloki tylko pierwszymi dwoma.
źródło
NomeN odpowiedział poprawnie, ale ta odpowiedź nie byłaby zbyt przydatna dla początkujących, takich jak ja, ponieważ będziemy mieli inny problem do rozwiązania i nie wiedzielibyśmy, jak tam używać RegEx. Więc dodaję do tego trochę wyjaśnienia. Odpowiedź to
Tutaj:
W poszukiwaniu:
Pierwszy i ostatni znak „(„ ”)” przedstawia grupę w wyrażeniu regularnym
„\ w” przedstawia słowa (znaki alfanumeryczne + podkreślenie)
„+” przedstawia jeden lub więcej (tj. jeden lub więcej znaków alfanumerycznych + podkreślenie)
'.' to znak specjalny, który przedstawia dowolny znak (tj. + oznacza jeden lub więcej znaków dowolnego znaku). Ponieważ jest to specjalny znak przedstawiający „.” powinniśmy wraz z nim podać znak ucieczki, tj. „.”
„someMethod” jest podawana tak, jak ma być przeszukiwana.
Dwa nawiasy '(', ')' są podane wraz ze znakiem ucieczki, ponieważ są to znaki specjalne, które są używane do przedstawienia grupy (omówimy o grupie w następnym punkcie)
W zamian:
Otrzymuje on „ ((TypeName) $ 1) ”, tutaj $ 1 przedstawia grupę. To są wszystkie znaki, które znajdują się w pierwszym i ostatnim nawiasie „(„, ”)” w polu wyszukiwania
Upewnij się również, że zaznaczyłeś opcję „Wyrażenie regularne” w polu Znajdź zamianę
Więcej informacji na temat RegEx można znaleźć pod adresem http://regexr.com/ .
źródło
Przynajmniej grupy STS (SpringSource Tool Suite) są numerowane począwszy od 0, więc zastąpiony ciąg będzie
źródło
Dla kogoś, kto potrzebuje wyjaśnienia i przykładu użycia regxp w Eclipse. Oto mój przykład ilustrujący problem.
Chcę zmienić nazwę
do
Może być ich wiele.
Oto, jak należy to zrobić.
Następnie naciśnij przycisk znajdź / zamień
źródło