2010-10-13 15 views
5

W Ruby oba wyrażenia wydają się zrobić podobne rzeczy:Jaka jest różnica między/to/a/ Ait Z/

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

Więc zastanawiać, jaka jest różnica między ^ - \A i $ - \Z i jak wybrać, którego z nich użyć?

+0

Czy w twoim przykładzie nie ma literówki? Powinien być '/ \ Ait \ Z /', prawda? –

+0

Tak, to jest typ. Dzięki. –

+0

@All: Zastanawiasz się, którą odpowiedź powinienem przyjąć, ponieważ wszystkie są bardzo jasne? Zrobię to po liczbie Up-Votes w kilka dni prawdopodobnie. –

Odpowiedz

10

Różnica jest tylko ważne, gdy ciąg jesteś dopasowywania może zawierać nowe linie. \A dopasowuje początek ciągu. ^ dopasowuje początek ciągu lub bezpośrednio po nowym wierszu. Podobnie \Z dopasowuje tylko koniec łańcucha, ale $ dopasowuje koniec łańcucha lub koniec linii.

Na przykład wyrażenie regularne /^world$/ pasuje do drugiej linii "hello \ nworld", ale wyrażenie /\Aworld\Z/ nie pasuje.

2

^ - początek linii
\A - początek napisu

$ - koniec linii
\Z - koniec sznurka

5

W silnikach regex obsługujących wyrażenia regularne kilka linii, ^ i $ są zwykle używane do rozpoczęcia i zakończenia linii markerów.

\A i \Z są dla początku i końca stringów znaczników.

Na przykład, wyrażenie:

Hello, my names 
are Bob and James 

pasowałby ames$ dwukrotnie (w nazwach i James), ale ames\Z tylko raz (dla Jamesa).

Powiązane problemy