Para PMD me gustaría tener una regla que me advierte de esas desagradables variables que comienzan con my
.
Esto significa que tengo que aceptar todas las variables con las que NO empiecen my
.
Entonces, necesito una expresión regular (re) que se comporte de la siguiente manera:
re.match('myVar') == false
re.match('manager') == true
re.match('thisIsMyVar') == true
re.match('myOtherVar') == false
re.match('stuff') == true
Probé diferentes pero aún no lo he conseguido.
regex
regex-negation
pmd
Dominik Sandjaja
fuente
fuente
Respuestas:
Puede utilizar una afirmación anticipada como han sugerido otros. O, si solo desea utilizar la sintaxis básica de expresiones regulares:
^(.?$|[^m].+|m[^y].*)
Esto coincide con cadenas que tienen cero o un carácter (
^.?$
) y, por lo tanto, no pueden tenermy
. O cadenas con dos o más caracteres donde cuando el primer carácter ya no es,m
pueden seguir más caracteres (^[^m].+
); o si el primer carácter es un,m
no debe ir seguido de uny
(^m[^y]
).fuente
^(?!my)\w+$
Deberia trabajar.
Primero asegura que no es posible hacer coincidir
my
al principio de la cadena y luego hace coincidir los caracteres alfanuméricos hasta el final de la cadena. Los espacios en blanco en cualquier parte de la cadena harán que la expresión regular falle. Dependiendo de su entrada, es posible que desee eliminar los espacios en blanco en la parte delantera y trasera de la cadena antes de pasarla a la expresión regular, o usar agregar comparadores de espacios en blanco opcionales a la expresión regular como^\s*(?!my)(\w+)\s*$
. En este caso, la referencia inversa 1 contendrá el nombre de la variable.Y si necesita asegurarse de que el nombre de su variable comience con un determinado grupo de caracteres, por ejemplo
[A-Za-z_]
, use^(?!my)[A-Za-z_]\w*$
Tenga en cuenta el cambio de
+
a*
.fuente
/^(?!my).*/
(?!expression)
es una mirada hacia el futuro negativa; coincide con una posición en laexpression
que no coincide a partir de esa posición.fuente
¿No sería mucho más legible hacer una coincidencia positiva y rechazar esas cadenas, en lugar de hacer coincidir las negativas para encontrar cadenas que aceptar?
/^my/
fuente