test - regex vb.net example
La cadena de coincidencia RegExp no comienza con mi (4)
¿No sería mucho más legible hacer una coincidencia positiva y rechazar esas cadenas, en lugar de hacer coincidir lo negativo para encontrar cadenas para aceptar?
/^my/
Para PMD me gustaría tener una regla que me advierta de esas feas variables que comienzan con mi. Esto significa que tengo que aceptar todas las variables que NO comienzan con mi.
Entonces, necesito un RegEx (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
He intentado con otros (los mencionaré aquí más tarde, lo siento, no tengo acceso a ellos en este momento) pero todavía no lo tengo funcionando.
Puede usar una afirmación de anticipación como otros han sugerido. O, si solo quieres usar la sintaxis básica de expresiones regulares:
^(.?$|[^m].+|m[^y].*)
Esto coincide con cadenas que tienen cero o un carácter de longitud ( ^.?$
) Y, por lo tanto, no pueden ser my
. O cadenas con dos o más caracteres, donde cuando el primer carácter no es un m
pueden seguir más caracteres ( ^[^m].+
); o si el primer carácter es un m
no debe ir seguido de y
( ^m[^y]
).
/^(?!my).*/
(?!expression)
es un lookahead negativo; coincide con una posición donde la expression
no coincide comenzando en esa posición.
^(?!my)/w+$
Deberia trabajar.
Primero se asegura de que no sea posible hacer coincidir my
al principio de la cadena, y luego compara caracteres alfanuméricos hasta el final de la cadena. El espacio en blanco en cualquier lugar de la cadena hará que la expresión regular falle. Dependiendo de su entrada, es posible que desee quitar el espacio en blanco en la parte frontal y posterior de la cadena antes de pasarlo a la expresión regular, o usar agregar contiendas 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 su nombre de variable comience con un cierto grupo de caracteres, digamos [A-Za-z_]
, use
^(?!my)[A-Za-z_]/w*$
Tenga en cuenta el cambio de +
a *
.