Na sintaxe do vim regex, estou tentando corresponder a todas as palavras iniciando com maiúsculas e não iniciando sublinhado
\([A-Z][a-z_][A-Za-z_]\+\)
Este é o que eu tenho até agora.
Eu quero algo assim:
\([A-Z^_][a-z_][A-Za-z_]\+\)
Onde [A-Z^\_]
indica que ele deve corresponder a todos os caracteres maiúsculos, mas não sublinhado.
Qualquer ajuda seria muito apreciada. Desde já, obrigado.
Edit: Minha pergunta foi mal formulada. Quero que o primeiro conjunto corresponda a um caractere maiúsculo, que não tenha um sublinhado na frente. Desculpe.
Respostas:
2 para resposta № 1[A-Z]
ja faz não incluir sublinhados; Eu acho que você quer combinar palavras inteiras, para que você não queira que sua expressão regular corresponda dentro uma palavra. Vim tem embutido <
e >
(gostar b
em outros dialetos de expressão regular, consulte a resposta de @npinti) para limites de palavras-chave; como caracteres maiúsculos / minúsculos e sublinhados são geralmente caracteres de palavra-chave, o agrupamento do seu padrão com esses já deve estar próximo o suficiente:
<([A-Z][a-z_][A-Za-z_]+)>
Para declarar estritamente nenhum sublinhado antes da sua correspondência (mas permitir que outras palavras-chave ou caracteres não-palavras-chave existam), você precisa de um lookbehind negativo: @<!
significa não é precedido por:
_@<!([A-Z][a-z_][A-Za-z_]+)
0 para resposta № 2
Onde [A-Z ^ _] indica que deve corresponder a todos os caracteres maiúsculos, mas não sublinhado.
[A-Z] já corresponde a todos os caracteres maiúsculos, exceto o sublinhado. No entanto, em sua primeira solução, você solicita que o segundo letra seja minúscula ou sublinhada ([a-z_]
) Se eu seguir a sua definição:
todas as palavras com maiúsculas e sem sublinhado
Então [A-Z][A-Za-z_]+
Deveria trabalhar.