2012-01-25 65 views
33

Có nghĩa là gì khi sử dụng phân đoạn lại cụm từ thông dụng?Trong biểu thức chính quy, tham chiếu ngược/quay lại là gì?

Ngoài ra, bạn có thể cung cấp ví dụ về điều này không?

+0

Giả sử * backtrace * = backtracking, câu hỏi tương tự: [Cụm từ thông dụng nào yêu cầu backtracking?] (Http://stackoverflow.com/questions/8132412/which-regular-expression-requires-backtracking) –

+0

Ah cảm ơn bạn. Vâng. – chrisjlee

+0

Có một số ví dụ hay với giải thích đầy đủ về http://www.regular-expressions.info/catastrophic.html – bkzland

Trả lời

53

Quay lại và quay ngược lại là hai điều khác nhau. Trước đây là sử dụng kết quả chụp sau này trong mã, ví dụ:

(['"]).*?\1 

Điều này sẽ khớp với chuỗi đơn hoặc kép (bỏ qua lần thoát). Nó sử dụng một backreference để tham khảo các biểu tượng mở (các đơn hoặc đôi quote) để nó có thể phù hợp với điều đó ở cuối.

Quay lại, mặt khác, là những biểu thức chính quy diễn ra tự nhiên trong quá trình khớp khi không khớp. Ví dụ, nếu tôi phù hợp với khái niệm

.+b 

so với chuỗi

aaaaaabcd 

sau đó nó đầu tiên sẽ phù hợp aaaaaabc trên .+ và so sánh b so với còn lại d. Điều này không thành công, do đó, nó quay ngược lại một chút và khớp với aaaaaab cho số .+ và sau đó so sánh số b cuối cùng với số c. Điều này cũng không thành công, do đó, nó sẽ ngược lại và thử aaaaaa cho số .+ và khớp với số b so với số b và thành công.

+0

Tuyệt vời! Thí dụ.. – SIslam

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