Hướng dẫn escape sequence in php - trình tự thoát trong php

Ký tự dấu gạch chéo ngược có một số cách sử dụng. Thứ nhất, nếu nó được theo sau bởi một nhân vật không phải là một nhân vật không đồngumeric, nó sẽ lấy đi bất kỳ ý nghĩa đặc biệt nào mà nhân vật có thể có. Việc sử dụng dấu gạch chéo ngược này như một ký tự thoát hiểm áp dụng cả hai lớp ký tự bên trong và bên ngoài.

Ví dụ: nếu bạn muốn khớp một ký tự "*", bạn sẽ viết "\*" trong mẫu. Điều này áp dụng cho dù nhân vật sau đây có được hiểu là một nhân vật tổng hợp hay không, do đó, luôn luôn an toàn khi đi trước một người không phải là vô cảm với "\" để chỉ định rằng nó là tự đứng. Cụ thể, nếu bạn muốn kết hợp một dấu gạch chéo ngược, bạn viết "\\".

Ghi chú::

Các chuỗi PHP được trích dẫn đơn và kép có ý nghĩa đặc biệt của dấu gạch chéo ngược. Do đó, nếu \ phải được khớp với biểu thức chính quy \\, thì "\\\\\" hoặc '\\\\\\' phải được sử dụng trong mã PHP.

Nếu một mẫu được biên dịch với tùy chọn PCRE_EXTENDS, thì khoảng trắng trong mẫu [trừ trong một lớp ký tự] và các ký tự giữa "#" bên ngoài một lớp ký tự và ký tự dòng tiếp theo sẽ bị bỏ qua. Một dấu gạch chéo ngược có thể được sử dụng để bao gồm một khoảng trắng hoặc ký tự "#" như một phần của mẫu.

Việc sử dụng thứ hai của dấu gạch chéo ngược cung cấp một cách mã hóa các ký tự không in theo các mẫu theo cách có thể nhìn thấy. Không có hạn chế về sự xuất hiện của các ký tự không in, ngoài số 0 nhị phân kết thúc một mẫu, nhưng khi một mẫu được chuẩn bị bằng cách chỉnh sửa văn bản, thường dễ sử dụng một trong các chuỗi thoát sau hơn so với ký tự nhị phân nó đại diện:

\ Một báo động, nghĩa là ký tự bel [hex 07] \ cx "control-x", trong đó x là bất kỳ ký tự nào \ e thoát [hex 1b] \ f formfeed [hex 0c] {xx} Một ký tự có thuộc tính XX, xem các thuộc tính unicode để biết thêm thông tin \ p {xx} Một ký tự không có thuộc tính XX, xem các thuộc tính Unicode để biết thêm thông tin .alarm, that is, the BEL character [hex 07] \cx "control-x", where x is any character \e escape [hex 1B] \f formfeed [hex 0C] \n newline [hex 0A] \p{xx} a character with the xx property, see unicode properties for more info \P{xx} a character without the xx property, see unicode properties for more info \r carriage return [hex 0D] \R line break: matches \n, \r and \r\n \t tab [hex 09] \xhh character with hex code hh \ddd character with octal code ddd, or backreference

Hiệu ứng chính xác của "\cx" như sau: nếu "x" là một chữ cái thường, nó được chuyển đổi thành trường hợp trên. Sau đó, bit 6 của nhân vật [Hex 40] bị đảo ngược. Do đó "\cz" trở thành Hex 1A, nhưng "\c{" trở thành Hex 3B, trong khi "\c;" trở thành Hex 7b.

Sau "\x", tối đa hai chữ số thập lục phân được đọc [chữ cái có thể ở trên hoặc chữ thường]. Trong chế độ UTF-8, "\x{...}" được cho phép, trong đó nội dung của niềng răng là một chuỗi các chữ số thập lục phân. Nó được hiểu là một ký tự UTF-8 có số mã là số thập lục phân đã cho. Trình tự thoát thập lục phân ban đầu, \xhh, khớp với ký tự UTF-8 hai byte nếu giá trị lớn hơn 127.

Sau khi "\0" lên đến hai chữ số bát phân tiếp theo được đọc. Trong cả hai trường hợp, nếu có ít hơn hai chữ số, chỉ có những chữ số có mặt được sử dụng. Do đó, trình tự "\0\x\07" chỉ định hai số không nhị phân theo sau là một ký tự bel. Hãy chắc chắn rằng bạn cung cấp hai chữ số sau 0 ban đầu nếu ký tự theo sau là một chữ số bát phân.

Việc xử lý dấu gạch chéo ngược theo sau là một chữ số khác 0 là phức tạp. Bên ngoài một lớp ký tự, PCRE đọc nó và bất kỳ chữ số nào sau đây dưới dạng số thập phân. Nếu số lượng nhỏ hơn 10 hoặc nếu có ít nhất nhiều điểm số trước đó đã bắt được dấu ngoặc đơn trong biểu thức, toàn bộ chuỗi được lấy làm tham chiếu trở lại. Một mô tả về cách thức hoạt động này được đưa ra sau đó, sau cuộc thảo luận về các mẫu con dấu ngoặc đơn.

Bên trong một lớp ký tự, hoặc nếu số thập phân lớn hơn 9 và không có nhiều người bắt giữ, pcre đọc lại tối đa ba chữ số octal sau dấu gạch chéo ngược và tạo ra một byte duy nhất từ ​​8 bit có ý nghĩa nhất của giá trị. Bất kỳ chữ số nào tiếp theo đều đứng cho mình. Ví dụ:

\ 040 là một cách khác để viết một không gian \ 40 là như nhau, với điều kiện có ít hơn 40 tiểu trình trước đó \ 7 luôn là một tham chiếu trở lại \ 11 có thể là một tài liệu tham khảo lại hoặc một cách khác để viết tab \ 011 luôn luôn là Tab \ 0113 là một tab theo sau là ký tự "3" \ 113 là ký tự có mã octal 113 [vì không thể có quá 99 tài liệu tham khảo trở lại] \ 377 là một byte bao gồm hoàn toàn 1 bit \ 81 là một Tài liệu tham khảo trở lại, hoặc một số 0 nhị phân theo sau là hai ký tự "8" và "1"is another way of writing a space \40 is the same, provided there are fewer than 40 previous capturing subpatterns \7 is always a back reference \11 might be a back reference, or another way of writing a tab \011 is always a tab \0113 is a tab followed by the character "3" \113 is the character with octal code 113 [since there can be no more than 99 back references] \377 is a byte consisting entirely of 1 bits \81 is either a back reference, or a binary zero followed by the two characters "8" and "1"

Lưu ý rằng các giá trị octal từ 100 trở lên không được giới thiệu bởi số 0 hàng đầu, bởi vì không có quá ba chữ số bát phân đã từng được đọc.

Tất cả các chuỗi xác định một giá trị byte duy nhất có thể được sử dụng cả các lớp ký tự bên trong và bên ngoài. Ngoài ra, bên trong một lớp ký tự, chuỗi "x0" được hiểu là ký tự backspace [Hex 08]. Bên ngoài một lớp nhân vật, nó có một ý nghĩa khác nhau [xem bên dưới].

Việc sử dụng thứ ba của dấu gạch chéo ngược là để chỉ định các loại ký tự chung:

\ d bất kỳ chữ số thập phân nào \ d bất kỳ ký tự nào không phải là chữ số thập phân ký tự khoảng trắng dọc \ v bất kỳ ký tự nào không phải là ký tự khoảng trắng dọcany decimal digit \D any character that is not a decimal digit \h any horizontal whitespace character \H any character that is not a horizontal whitespace character \s any whitespace character \S any character that is not a whitespace character \v any vertical whitespace character \V any character that is not a vertical whitespace character \w any "word" character \W any "non-word" character

Mỗi cặp chuỗi thoát hiểm phân vùng hoàn chỉnh của các ký tự thành hai bộ phân tách. Bất kỳ ký tự nhất định đều khớp với một, và chỉ một, của mỗi cặp.

Các ký tự "khoảng trắng" là HT [9], LF [10], FF [12], CR [13] và không gian [32]. Tuy nhiên, nếu sự kết hợp cụ thể của ngôn ngữ đang diễn ra, các ký tự có điểm mã trong phạm vi 128-255 cũng có thể được coi là ký tự khoảng trắng, ví dụ, NBSP [A0].

Một ký tự "từ" là bất kỳ chữ cái hoặc chữ số nào hoặc ký tự dấu gạch dưới, nghĩa là bất kỳ ký tự nào có thể là một phần của "từ" perl. Định nghĩa về các chữ cái và chữ số được kiểm soát bởi các bảng ký tự của PCRE và có thể thay đổi nếu kết hợp phù hợp cụ thể của ngôn ngữ đang diễn ra. Ví dụ, trong ngôn ngữ "FR" [tiếng Pháp], một số mã ký tự lớn hơn 128 được sử dụng cho các chữ cái có dấu và chúng được khớp với x1.

Các chuỗi loại ký tự này có thể xuất hiện cả hai lớp ký tự bên trong và bên ngoài. Mỗi người khớp một ký tự của loại thích hợp. Nếu điểm khớp hiện tại ở cuối chuỗi chủ đề, tất cả đều thất bại, vì không có ký tự để khớp.

Việc sử dụng thứ tư của dấu gạch chéo ngược là cho một số khẳng định đơn giản. Một xác nhận chỉ định một điều kiện phải được đáp ứng tại một điểm cụ thể trong một trận đấu, mà không tiêu thụ bất kỳ ký tự nào từ chuỗi chủ đề. Việc sử dụng các mẫu đơn cho các khẳng định phức tạp hơn được mô tả dưới đây. Các khẳng định chộp lại là

\ B Boundary \ B không phải là một từ ranh giới \ Bắt đầu của chủ đề [không phụ thuộc vào chế độ đa dòng] \ z cuối của chủ đề hoặc dòng mới ở cuối [không phụ thuộc vào chế độ đa dòng] Vị trí phù hợp trong chủ đềword boundary \B not a word boundary \A start of subject [independent of multiline mode] \Z end of subject or newline at end [independent of multiline mode] \z end of subject [independent of multiline mode] \G first matching position in subject

Những xác nhận này có thể không xuất hiện trong các lớp ký tự [nhưng lưu ý rằng "x0" có một ý nghĩa khác, cụ thể là ký tự backspace, bên trong một lớp ký tự].

Một ranh giới từ là một vị trí trong chuỗi chủ thể trong đó ký tự hiện tại và ký tự trước không khớp với x1 hoặc x4 [tức là một khớp nối x1 và các khớp khác phù hợp với ký tự phù hợp với x1, tương ứng.

Các xác nhận x8, x9 và \cz0 khác với chu vi truyền thống và đô la [được mô tả trong các neo] ở chỗ chúng chỉ khớp ngay khi bắt đầu và kết thúc chuỗi chủ đề, bất kỳ tùy chọn nào được đặt. Chúng không bị ảnh hưởng bởi các tùy chọn pcre_multiline hoặc pcre_dollar_endonly. Sự khác biệt giữa x9 và \cz0 là x9 khớp trước một dòng mới là ký tự cuối cùng của chuỗi cũng như ở cuối chuỗi, trong khi \cz0 chỉ khớp với cuối.

Khẳng định \cz5 chỉ đúng khi vị trí khớp hiện tại ở điểm bắt đầu của trận đấu, như được chỉ định bởi đối số \cz6 của preg_match []. Nó khác với x8 khi giá trị của \cz6 không khác.preg_match[]. It differs from x8 when the value of \cz6 is non-zero.

\cz9 và \c{0 có thể được sử dụng để bỏ qua các metacharacters regexp trong mẫu. Ví dụ: \c{1 sẽ khớp với một hoặc nhiều ký tự từ, theo sau là chữ \c{2 và neo ở cuối chuỗi. Lưu ý rằng điều này không thay đổi hành vi của các phân định; Ví dụ, mẫu \c{3 không hợp lệ, bởi vì \c{4 thứ hai đánh dấu sự kết thúc của mẫu và \c{5 được hiểu là các sửa đổi không hợp lệ.

\c{6 có thể được sử dụng để thiết lập lại bắt đầu trận đấu. Ví dụ: mẫu \c{7 khớp với "foobar", nhưng báo cáo rằng nó đã khớp với "thanh". Việc sử dụng \c{6 không can thiệp vào cài đặt của các chuỗi con bị bắt. Ví dụ: khi mẫu \c{9 khớp với "foobar", chuỗi con đầu tiên vẫn được đặt thành "foo".

Mike tại Eastghost Dot Com ¶

10 năm trước

\c;0

\c;1

\c;2

\c;3

\c;4

Ẩn danh ¶

3 năm trước

\c;5

\c;6

\c;7

\c;4

Dây ¶

4 năm trước

\c;9

\x0

\x1

\x2

\x3

\x4

\x5

\x6

\x7

\x5

\x9

\x{...}0

Grigor tại miền Gatchev.info ¶

11 năm trước

\x{...}1

Dây ¶

4 năm trước

\x{...}2

\x{...}3

\x0

\x1

\x2

\x3

\x4

\x{...}9

\xhh0

\x5

\xhh2

\xhh3

Thông tin tại Maisuma Dot JP ¶

8 năm trước

\xhh4

\xhh5

\c;4

bluemoehre tại gmx dot de ¶

8 năm trước

\xhh7

\xhh8

\c;4

bluemoehre tại gmx dot de ¶

Lỗi17191 tại Gmail Dot Com ¶

\00

7 năm trước

vea dot git tại gmail dot com ¶

\01

\02

\03

\04

\05

\c;4

5 năm trước

collons tại ya dot com ¶

\07

Bài Viết Liên Quan

Chủ Đề