Para o PMD, gostaria de ter uma regra que me avisasse sobre as variáveis feias que começam com my
.
Isso significa que tenho que aceitar todas as variáveis que NÃO começam com my
.
Portanto, preciso de um RegEx (re) que se comporte da seguinte maneira:
re.match('myVar') == false
re.match('manager') == true
re.match('thisIsMyVar') == true
re.match('myOtherVar') == false
re.match('stuff') == true
Tentei vários, mas ainda não fiz funcionar.
regex
regex-negation
pmd
Dominik Sandjaja
fonte
fonte
Respostas:
Você pode usar uma afirmação antecipada como outros sugeriram. Ou, se você quiser apenas usar a sintaxe de expressão regular básica:
^(.?$|[^m].+|m[^y].*)
Corresponde a strings que têm zero ou um caractere (
^.?$
) e, portanto, não podem termy
. Ou strings com dois ou mais caracteres onde quando o primeiro caractere não for um,m
mais caracteres podem seguir (^[^m].+
); ou se o primeiro caractere for umm
, não deve ser seguido por umy
(^m[^y]
).fonte
^(?!my)\w+$
Deveria trabalhar.
Ele primeiro garante que não é possível fazer a correspondência
my
no início da string e, em seguida, faz a correspondência de caracteres alfanuméricos até o final da string. Espaços em branco em qualquer lugar da string farão com que a regex falhe. Dependendo da sua entrada, você pode remover os espaços em branco na frente e atrás da string antes de passá-la para a regex ou usar adicionar correspondências de espaço em branco opcionais à regex^\s*(?!my)(\w+)\s*$
. Nesse caso, a referência anterior 1 conterá o nome da variável.E se você precisar garantir que o nome da variável comece com um certo grupo de caracteres, por exemplo
[A-Za-z_]
, use^(?!my)[A-Za-z_]\w*$
Observe a mudança de
+
para*
.fonte
/^(?!my).*/
(?!expression)
é uma antevisão negativa; corresponde a uma posição ondeexpression
não corresponde a partir dessa posição.fonte
Não seria significativamente mais legível fazer uma correspondência positiva e rejeitar essas cadeias de caracteres - em vez de corresponder à negativa para encontrar cadeias de caracteres para aceitar?
/^my/
fonte