No eclipse, é possível usar a string de pesquisa correspondente como parte da string de substituição ao realizar uma pesquisa e substituição de expressão regular?
Basicamente, desejo substituir todas as ocorrências de
variableName.someMethod()
com:
((TypeName)variableName.someMethod())
Onde variableName pode ser qualquer nome de variável.
No sed, eu poderia usar algo como:
s/[a-zA-Z]+\.someMethod\(\)/((TypeName)&)/g
Ou seja, & representa a string de pesquisa correspondente. Existe algo semelhante no Eclipse?
Obrigado!
Respostas:
Sim, "()" captura um grupo. você pode usá-lo novamente com $ i, onde i é o i'ésimo grupo de captura.
Assim:
Dica: CTRL+ Spacenas caixas de texto oferece todos os tipos de sugestões para a escrita de expressões regulares.
fonte
stringVar.equals("xxx")
por"xxx".equals(stringVar)
. Usei o seguinte regex na caixa de diálogo localizar / substituir:search: ([^()! ]+).equals\("(.*)"\)
,replace: "$2".equals\($1\)
.Usando ...
search = (^. * Import) (. *) (\ (. * \) :)
replace = $ 1 $ 2
... substitui ...
...com...
Os blocos no regex são delineados por parênteses (que não são precedidos por um "\")
(^. * Import) localiza "da importação de cheques" e carrega para $ 1 (o eclipse começa a contar em 1)
(. *) Encontre o próximo " tudo "até o próximo encontrado" ("e carrega para $ 2. $ 2 para no" ("por causa da próxima parte (veja a próxima linha abaixo)
(\ (. * \) :) diz" no primeiro encontrado "( "depois de iniciar o bloco $ 2 ... pare o bloco $ 2 e comece $ 3. $ 3 é carregado com o" ('qualquer texto'): "ou, no exemplo, o" (_list): "
Em seguida, na substituição, basta colocar o $ 1 $ 2 para substituir todos os três blocos apenas pelos dois primeiros.
fonte
O NomeN respondeu corretamente, mas essa resposta não seria muito útil para iniciantes como eu porque teremos outro problema para resolver e não saberíamos como usar o RegEx lá. Portanto, estou adicionando um pouco de explicação a isso. A resposta é
Aqui:
Em busca:
O primeiro e o último '(' ')' representam um grupo em regex
'\ w' representa palavras (alfanumérico + sublinhado)
'+' representa um ou mais (ou seja, um ou mais alfanuméricos + sublinhado)
'.' é um caractere especial que representa qualquer caractere (ou seja, + significa um ou mais de qualquer caractere). Porque este é um personagem especial para representar um '.' devemos fornecer um caractere de escape com ele, ou seja, '.'
'someMethod' é fornecido como deve ser pesquisado.
Os dois parênteses '(', ')' são fornecidos junto com o caractere de escape porque eles são caracteres especiais que são usados para representar um grupo (discutiremos sobre o grupo no próximo ponto)
Em substituição:
É dado ' ((TypeName) $ 1) ', aqui $ 1 representa o grupo. São todos os caracteres que estão entre o primeiro e o último parênteses '(', ')' no campo de pesquisa
Além disso, certifique-se de ter marcado a opção 'Expressão regular' em localizar uma caixa de substituição
Mais informações sobre RegEx podem ser encontradas em http://regexr.com/ .
fonte
Pelo menos em STS (SpringSource Tool Suite) os grupos são numerados a partir de 0, então a string de substituição será
fonte
Para quem precisa de uma explicação e um exemplo de como usar um regxp no Eclipse. Aqui está meu exemplo ilustrando o problema.
Eu quero renomear
para
E pode haver vários deles.
Aqui está como isso deve ser feito.
Em seguida, clique no botão localizar / substituir
fonte