2010-10-13 3 views
5

Dans Ruby deux expressions semblent faire des choses similaires:Quelle est la différence entre/elle/et/ Ait Z/

'it' =~ /^it$/ # 0 
'it' =~ /\Ait\Z/ # 0 
# but 
/^it$/ == /\Ait\Z/ # false 

Je une demande quelle est la différence entre ^ - \A et $ - \Z et comment choisir lequel utiliser?

+0

N'est-ce pas une faute de frappe dans votre exemple? Devrait être '/ \ Ait \ Z /', non? –

+0

Oui, c'est le type. Merci. –

+0

@All: Vous vous demandez quelle réponse je devrais accepter comme chacun d'eux est très clair? Je vais le faire par le nombre de Up-Votes dans quelques jours probablement. –

Répondre

10

La seule différence est importante lorsque la chaîne que vous êtes correspondant à contre peut contenir nouvelles lignes. \A correspond au début d'une chaîne. ^ correspond au début d'une chaîne ou immédiatement après une nouvelle ligne. De même, \Z ne correspond qu'à la fin de la chaîne, mais $ correspond à la fin de la chaîne ou à la fin d'une ligne. Par exemple, l'expression régulière /^world$/ correspond à la deuxième ligne de "bonjour \ nworld" mais l'expression /\Aworld\Z/ ne correspond pas.

2

^ - début de la ligne
\A - début de la chaîne

$ - fin de ligne
\Z - fin de la chaîne

5

Dans les moteurs regex qui prennent en charge les expressions régulières multi-lignes, ^ et $ sont habituellement utilisés pour le début et la fin de ligne marqueurs.

\A et \Z sont de début et de fin de chaîne marqueurs.

Par exemple, la chaîne:

Hello, my names 
are Bob and James 

sélectionnne ames$ deux fois (pour les noms et James), mais ames\Z qu'une seule fois (pour James).

Questions connexes