Il correspond à des chaînes qui BEGIN avec ^
suivie tout caractère autre que^
.
Il égalerait:
^foo
^b
mais pas
foo
^^b
Explication:
Caret (^
) est un caractère regex méta avec deux significations différentes:
En dehors de la classe de caractères (1ère utilisation dans votre regex) fonctionne comme start ancre.
intérieur la classe de caractères, il agit comme négateursi utilisé comme premier caractère de la classe de caractères (3e utilisation dans votre regex).
La précédation d'une regex avec \
lui échappe (le rend non-spécial). La 2ème utilisation de ^
dans votre expression régulière est échappée et elle correspond à la valeur littérale ^
dans la chaîne.
l'intérieur d'une classe de personnage qui est un ^
pas le premier caractère de la classe de caractères est traité littéralement. Donc la 4ème utilisation dans votre regex est un littéral ^
.
Quelques exemples à préciser:
^a
: Matchs commençant chaîne avec a
^ab
: chaîne Correspondances commençant le avec a
suivi par b
[a]
: correspond à une chaîne qui a un a
[^a]
: correspond à une chaîne qui ne dispose pas d'un a
^a[^a]
: Ma tappe une chaîne en commençant par un a
suivi de tout caractère autre que a
.
Il serait beaucoup plus clair si vous avez posté l'expression régulière réelle, pas la chaîne Java avec ses bbaacckkssllllaasshhesses douloureuses et parfois trompeuses. – tchrist
@tchrist - pourquoi? il a dit que ** cette séquence de caractères lui a été donnée dans une interview, une interview liée à Java, je suppose, en regardant l'étiquette. (BTW - la balise regex a été ajoutée par quelqu'un d'autre, à l'origine il a été étiqueté Java uniquement) –
@Andreas_D, je déteste admettre combien de fois j'ai foiré une regex Java à cause du problème de backslash. Maintenant, je les lis à partir d'un fichier d'accessoires ou en tant qu'argument de ligne de commande pour essayer d'éviter le problème. Même ainsi, il y a une grande différence entre un littéral Java utilisé comme regex et une regex réelle. C'est comme se battre avec la coquille, mais pire. – tchrist