Coincide con cadenas que comienzan con ^
seguido por cualquier carácter que no sea ^
.
Por lo que se correspondería con:
^foo
^b
pero no
foo
^^b
Explicación:
Caret (^
) es un personaje meta de expresiones regulares con dos significados diferentes:
Fuera de la clase de caracteres (primer uso en su expresión regular) funciona como iniciar ancla.
Dentro de la clase de caracteres que actúa como negador si utilizado como el primer carácter de la clase de caracteres (tercero el uso en su expresión regular).
Precede a una expresión regular con \
escapa (lo hace no especial). El segundo uso de ^
en su expresión regular se escapó y coincide con un literal ^
en la cadena.
Dentro de una clase de caracteres de un ^
que es no la primera carácter de la clase de caracteres se trata literalmente. Entonces, el 4to uso en su expresión regular es un literal ^
.
Algunos ejemplos más para que quede claro:
^a
: Partidos cadena que comienza con a
^ab
: cadena coincide comienzo con a
seguido por b
[a]
: Encaja en una cadena que tiene un a
[^a]
: Encaja en una cadena que no tiene una a
^a[^a]
: Ma marca una cadena comenzando con a
seguido de cualquier carácter que no sea a
.
Sería mucho más claro si publicaras la expresión regular real, no la cadena de Java con sus dolorosas ya veces engañosas bbaacckkssllllaasshheesses. – tchrist
@tchrist - ¿por qué? él dijo que ** esta ** secuencia de caracteres le fue dada en una entrevista, una entrevista relacionada con Java, supongo, mirando la etiqueta. (Por cierto, la etiqueta de expresión regular fue agregada por otra persona, originalmente solo estaba etiquetada como Java) –
@Andreas_D, odio admitir cuántas veces he estropeado una expresión regular de Java debido al problema de la barra diagonal inversa. Ahora los leo desde un archivo de utilería o como un argumento de línea de comando para (intentar) evitar el problema. Aun así, hay una gran diferencia entre un literal de Java utilizado como expresión regular y una expresión regular real. Es como pelear con el caparazón, pero peor. – tchrist