2010-11-22 3 views
13

Dans les expressions régulières:

  • Quelle est la différence entre ^ et \A? Quelle est la différence entre $ et \Z?
+0

Quelle est la saveur de regex de quelle langue? –

+0

En PHP. PHP depuis 5.3 utilise seulement PCRE (Reg Ex compatible Perl) et d'autres ENgines ont été déconseillés en faveur de PCRE. Donc, fondamentalement style PERL –

+0

connexes: http://stackoverflow.com/questions/4020792/regular-expressions-difference-between-and-a –

Répondre

10

En mode ligne unique, $ correspond soit à la fin de la chaîne, soit juste avant le retour à la fin de la chaîne. En mode multiligne $ correspond avant chaque nouvelle ligne dans la chaîne. \Z correspond toujours à la fin de la chaîne quel que soit le mode de ligne. Idem avec ^ par rapport à \A.

+2

désolé mais ce n'est pas tout à fait raison. '\ Z' correspond à la fin de la chaîne ** OU ** un avant la fin de la chaîne si le dernier caractère est un \ n. Pour la version absolument, non-oh-juste-dans-cas, vous voulez '\ z' (peu zed pas BIG ZED), qui est garanti pour correspondre seulement s'il n'y a plus de caractères. Dans certains langages regex, BTW, ce qui compte comme un retour à la ligne peut être flexible; Si vous avez de la chance, cela correspond '(?: (?> \ r \ n) | \ v)' pour toute séquence de saut de ligne, où '\ v' est la propriété Unicode' \ p {Vertical_Space} '. – tchrist

+0

Une autre chose: le mode mono-ligne n'est * pas * l'opposé du mode multiligne; ils sont complètement séparés. Le mode multiligne modifie le comportement de '^' et '$' comme vous l'avez décrit, tandis que le mode à une seule ligne permet '.' de faire correspondre les caractères de séparateur de ligne. –

+1

Et une note au commentaire de tchrist: en Python 're',' \ Z' est égal à '\ z' en Perl/.NET/Java/PCRE. –

3

Ils sont différents lorsqu'il s'agit de faire correspondre une chaîne avec plusieurs lignes.

^peut correspondre au début de la chaîne et après chaque saut de ligne. \ Une seule correspondance au début de la chaîne

$ peut correspondre à la fin de la chaîne et avant chaque saut de ligne. \ Z ne correspond jamais à la fin de la chaîne.

7

Voir perldoc perlre.

Le \ A et \ Z sont comme «^» et « $ », sauf qu'ils ne correspondent pas à plusieurs reprises lorsque le modificateur/m est utilisé, alors que «^» et « $ "correspondra à chaque limite de ligne interne. Pour correspondre la fin réelle de la chaîne et non ignorer une nouvelle ligne de fin facultative, utilisez \ z.

Questions connexes