2010-10-13 50 views
5

Trong Ruby cả hai biểu thức dường như làm những việc tương tự:sự khác biệt giữa/là gì nó/và/ Ait Z/

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

Vì vậy, tôi một tự hỏi sự khác biệt giữa ^ là gì - \A$ - \Z và cách chọn cái nào sẽ sử dụng?

+0

Không có lỗi đánh máy trong ví dụ của bạn? Nên là '/ \ Ait \ Z /', phải không? –

+0

Vâng, đó là loại. Cảm ơn. –

+0

@All: Tự hỏi câu trả lời nào tôi nên chấp nhận vì tất cả chúng đều rất rõ ràng? Tôi sẽ làm điều đó bằng số lượng Up-Votes trong một vài ngày có thể. –

Trả lời

10

Sự khác biệt là chỉ quan trọng khi chuỗi bạn đang so khớp chống lại có thể chứa dòng mới. \A khớp với đầu chuỗi. ^ khớp với sự bắt đầu của chuỗi hoặc ngay sau một dòng mới. Tương tự, \Z chỉ khớp với phần cuối của chuỗi, nhưng $ khớp với phần cuối của chuỗi hoặc kết thúc của một dòng.

Ví dụ: biểu thức chính quy /^world$/ khớp với dòng thứ hai của "hello \ nworld" nhưng biểu thức /\Aworld\Z/ không khớp.

2

^ - khởi đầu của dòng
\A - khởi đầu của chuỗi

$ - cuối dòng
\Z - cuối chuỗi

5

Trong các công cụ regex hỗ trợ biểu thức chính quy nhiều dòng, ^$ thường được sử dụng để bắt đầu và kết thúc của các vạch đánh dấu dòng.

\A\Z là để bắt đầu và kết thúc chuỗi điểm đánh dấu.

Ví dụ, chuỗi:

Hello, my names 
are Bob and James 

sẽ phù hợp với ames$ hai lần (cho tên và James) nhưng ames\Z chỉ một lần (đối với James).

Các vấn đề liên quan