Php chỉ cho phép các chữ cái

Lookahead và lookbehind, được gọi chung là “lookaround”, là các xác nhận có độ dài bằng 0 giống như bắt đầu và kết thúc dòng, cũng như bắt đầu và kết thúc các neo từ được giải thích trước đó trong hướng dẫn này. Sự khác biệt là cái nhìn xung quanh thực sự khớp với các ký tự, nhưng sau đó từ bỏ kết quả khớp, chỉ trả về kết quả. phù hợp hoặc không phù hợp. Đó là lý do tại sao chúng được gọi là "khẳng định". Chúng không sử dụng các ký tự trong chuỗi mà chỉ xác nhận xem có thể khớp hay không. Lookaround cho phép bạn tạo các biểu thức chính quy không thể tạo nếu không có chúng hoặc sẽ rất dài nếu không có chúng

Cái nhìn tích cực và tiêu cực

Cái nhìn tiêu cực là không thể thiếu nếu bạn muốn khớp thứ gì đó không theo sau thứ khác. Khi giải thích các lớp ký tự, hướng dẫn này giải thích lý do tại sao bạn không thể sử dụng lớp ký tự phủ định để khớp với q không theo sau u. Cái nhìn tiêu cực cung cấp giải pháp. q[?. bạn]. Cấu trúc lookahead phủ định là cặp dấu ngoặc đơn, với dấu ngoặc đơn mở theo sau là dấu chấm hỏi và dấu chấm than. Bên trong giao diện, chúng ta có biểu thức chính quy tầm thường u

Cái nhìn tích cực hoạt động giống nhau. q[?=u] khớp với q theo sau là u mà không biến u thành một phần của kết quả khớp. Cấu trúc tìm kiếm tích cực là một cặp dấu ngoặc đơn, với dấu ngoặc đơn mở theo sau là dấu chấm hỏi và dấu bằng

Bạn có thể sử dụng bất kỳ biểu thức chính quy nào bên trong cái nhìn phía trước [nhưng không phải cái nhìn phía sau, như được giải thích bên dưới]. Bất kỳ biểu thức chính quy hợp lệ nào cũng có thể được sử dụng bên trong giao diện. Nếu nó chứa các nhóm chụp thì các nhóm đó sẽ chụp như bình thường và các phản hồi đối với chúng sẽ hoạt động bình thường, ngay cả bên ngoài giao diện. [Ngoại lệ duy nhất là Tcl, coi tất cả các nhóm bên trong lookahead là không bắt giữ. ] Bản thân lookahead không phải là một nhóm chụp. Nó không được bao gồm trong số lượng đối với việc đánh số các phản hồi. Nếu bạn muốn lưu trữ kết quả khớp của biểu thức chính quy bên trong giao diện, bạn phải đặt dấu ngoặc đơn bắt xung quanh biểu thức chính quy bên trong giao diện, như thế này. [?=[regex]]. Cách khác sẽ không hoạt động, bởi vì trình xem trước sẽ loại bỏ kết quả khớp regex vào thời điểm nhóm chụp lưu trữ kết quả khớp của nó

Nội bộ công cụ Regex

Trước tiên, hãy xem cách động cơ áp dụng q[?. u] vào chuỗi Iraq. Mã thông báo đầu tiên trong biểu thức chính quy là chữ q. Như chúng ta đã biết, điều này khiến động cơ di chuyển qua chuỗi cho đến khi chữ q trong chuỗi khớp với nhau. Vị trí trong chuỗi bây giờ là khoảng trống sau chuỗi. Mã thông báo tiếp theo là cái nhìn về phía trước. Công cụ lưu ý rằng nó hiện đang ở bên trong cấu trúc giao diện và bắt đầu khớp với biểu thức chính quy bên trong giao diện. Vì vậy, mã thông báo tiếp theo là bạn. Điều này không khớp với khoảng trống sau chuỗi. Công cụ lưu ý rằng regex bên trong giao diện không thành công. Vì giao dịch nhìn trước là số âm, điều này có nghĩa là giao dịch nhìn trước đã khớp thành công tại vị trí hiện tại. Tại thời điểm này, toàn bộ biểu thức chính quy đã khớp và q được trả về dưới dạng khớp

Hãy thử áp dụng biểu thức chính quy tương tự để thoát. q phù hợp với q. Mã thông báo tiếp theo là u bên trong giao diện. Ký tự tiếp theo là u. những trận đấu này. Động cơ tiến tới ký tự tiếp theo. tôi. Tuy nhiên, nó được thực hiện với regex bên trong lookahead. Công cụ ghi chú thành công và loại bỏ kết quả khớp regex. Điều này làm cho động cơ lùi lại trong chuỗi để u

Bởi vì cái nhìn phía trước là tiêu cực, kết quả phù hợp thành công bên trong nó làm cho cái nhìn không thành công. Vì không có hoán vị nào khác của biểu thức chính quy này, nên động cơ phải khởi động lại từ đầu. Vì q không thể khớp với bất kỳ nơi nào khác, nên động cơ báo lỗi

Hãy nhìn vào bên trong một lần nữa, để đảm bảo rằng bạn hiểu ý nghĩa của việc nhìn về phía trước. Hãy áp dụng q[?=u]i để thoát. Nhìn về phía trước hiện đang tích cực và được theo sau bởi một mã thông báo khác. Một lần nữa, q khớp với q và u khớp với u. Một lần nữa, trận đấu từ cái nhìn phía trước phải bị loại bỏ, vì vậy công cụ sẽ lùi lại từ i trong chuỗi thành u. Nhìn về phía trước đã thành công, vì vậy động cơ tiếp tục với tôi. Nhưng tôi không thể phù hợp với bạn. Vì vậy, nỗ lực phù hợp này không thành công. Tất cả các lần thử còn lại cũng thất bại vì không còn chữ q nào trong chuỗi

Regex q[?=u]i không bao giờ có thể khớp với bất kỳ thứ gì. Nó cố khớp u và tôi ở cùng một vị trí. Nếu có u ngay sau q thì tra cứu thành công nhưng sau đó tôi không khớp với u. Nếu có bất cứ điều gì khác ngoài u ngay sau q thì quá trình tìm kiếm không thành công

Cái nhìn tích cực và tiêu cực

Lookbehind có tác dụng tương tự, nhưng hoạt động ngược lại. Nó yêu cầu công cụ regex tạm thời lùi lại trong chuỗi, để kiểm tra xem văn bản bên trong giao diện có thể khớp ở đó không. [? khớp với chữ “b” không đứng trước chữ “a”, sử dụng giao diện phủ định. Nó không khớp với taxi, nhưng khớp với b [và chỉ b] trong giường hoặc nợ. [?

Chủ Đề