Estou procurando fazer a substituição da pesquisa por expressões regulares no Sublime Text 2. A documentação sobre isso é bastante anêmica. Especificamente, quero fazer uma substituição em grupos, algo como converter este texto:
Hello my name is bob
E este termo de pesquisa:
Encontre o que: my name is (\w)+
Substituir com: my name used to be $(1)
O termo de pesquisa funciona muito bem, mas não consigo descobrir uma maneira de fazer uma substituição usando o grupo regexp.
fonte
$0
?\0
é igual ao caractere nulo e\0ddd
usado como escape para um caractere com ponto de código ddd). No entanto,$0
parece ser usado no Sublime2 como uma "marca de saída" de acordo com esta página (embora eu esteja tendo problemas para encontrar exemplos suficientes para descobrir exatamente como uma marca de saída é usada no Sublime2).$0
é usada no Sublime Text 2/3 para colocar o cursor na saída de uma expansão de trecho. Mais sobre trechos .$0
é a correspondência de regex inteira;$1
é o primeiro grupo de captura.A propósito, na pergunta acima:
Para:
Encontre parte:
Com peça de substituição:
Retornaria:
Altere encontrar parte para:
E substituir será o que você espera:
Embora (\ w) + corresponda a "bob", não é o agrupamento que você deseja substituir.
fonte
Enquanto a resposta anterior estiver correta, há uma coisa importante a enfatizar! Todos os segmentos correspondentes na sua sequência de pesquisa que você deseja usar na sequência de substituição devem ser colocados entre
( )
parênteses , caso contrário, esses segmentos correspondentes não estarão acessíveis a variáveis definidas como$1
,$2
ou\1
,\2
etc.Por exemplo, queremos substituir 'em' por 'px', mas preservar os valores dos dígitos:
margin: $1px
oumargin: \1px
margin: ([0-9]*)em
// com parêntesesmargin: [0-9]*em
EXEMPLO DE CASO CORRETO: Usando a
margin: ([0-9]*)em
sequência de pesquisa (entre parênteses). Coloque o segmento correspondente desejado (por exemplo,$1
ou\1
) entre( )
parênteses, da seguinte maneira:margin: ([0-9]*)em
(entre parênteses)margin: $1px
oumargin: \1px
EXEMPLO DE CASO INCORRETO: Usando a
margin: [0-9]*em
sequência de pesquisa (sem parênteses). O seguinte padrão regex corresponderá às linhas desejadas, mas os segmentos correspondentes não estarão disponíveis na cadeia substituída como variáveis como$1
ou\1
:margin: [0-9]*em
(sem parênteses)margin: $1px
oumargin: \1px
fonte
Aqui está uma apresentação visual da resposta aprovada.
fonte
$_SESSION[(\w+)
? obrigadoObserve que se você usar mais de 9 grupos de captura, precisará usar a sintaxe
${10}
.$10
ou\10
ou não\{10}
irá funcionar.fonte
1
ao segundo grupo de captura que você precisa usar chaves como${2}1
; $ 21 refere-se ao 21º grupo de captura, que não existe.Olhando para o artigo da Documentação não oficial de texto sublime sobre Pesquisar e substituir , parece que
+(.+)
é o grupo de captura que você pode desejar ... mas eu pessoalmente o usei(.*)
e funcionou bem. Para SUBSTITUIR da maneira que você está dizendo, você pode gostar dessa conversa nos fóruns , especificamente nesta postagem que diz simplesmente usar$1
para usar o primeiro grupo capturado.E como as imagens são melhores que as palavras ...
Antes:
Depois de:
fonte