Chương 9. Hàm và toán tử
9.7.3. Các biểu thức POSIX thông thường
9.7.3.3. Các thoát biểu thức thông thường
Các thoát là những tuần tự đặc biệt bắt đầu với dấu chéo ngược \ đi theo sau với một ký tự abc. Các thoát có vài biến thể khác nhau: khoản vào của ký tự, các tốc ký lớp, các thoát ràng buộc và các tham chiếu ngược. Một dấu chéo ngược theo sau là một ký tự abc nhưng không cấu thành một thoát hợp lý là không hợp lệ trong các ARE. Trong các ERE, không có các thoát: ngoài một biểu thức dấu ngoặc vuông, thì một dấu chéo ngược \ đi sau một ký tự abc chỉ thay cho ký tự đó như một ký tự thông thường, và bên trong một biểu thức dấu ngoặc vuông, thì dấu chéo ngược \ là một ký tự thông thường. (Cái sau là cái thực sự không tương thích giữa các ERE và ARE).
Các thoát khoản vào của ký tự (character-entry escape) tồn tại để làm cho dễ dàng hơn để chỉ định các ký tự không in được và các ký tự không thuận tiện khác trong các RE. Chúng được chỉ ra trong Bảng 9-15.
Các thoát tốc ký lớp ( Class-shorthand escapes) đưa ra các tốc ký cho các lớp ký tự nhất định được sử dụng phổ biến. Chúng được chỉ ra trong Bảng 9-16.
Một thoát ràng buộc là một ràng buộc, khớp với chuỗi rỗng nếu các điều kiện đặc biệt được đáp ứng, được viết như một thoát. Chúng được chỉ ra trong Bảng 9-17.
Một tham chiếu ngược (\n) khớp với cùng y hệt chuỗi được biểu thức phụ trong các dấu ngoặc đơn trước đó khớp được số n chỉ định (xem Bảng 9-18). Ví dụ, ([bc])\1 khớp với bb hoặc cc nhưng không với bc hoặc cb. Biểu thức con phải hoàn toàn đứng trước tham chiếu ngược trong RE. Các biểu thức con được đánh số theo trật tự các dấu ngoặc đơn dẫn dắt của chúng. Các dấu ngoặc đơn không bắt được sẽ không xác định các biểu thức con.
Lưu ý: Hãy ghi nhớ rằng một dấu chéo ngược \ dẫn dắt của sự thoát sẽ cần phải được đúp bản khi vào mẫu như một hằng chuỗi SQL. Ví dụ:
’123’ ~ E’^\\d{3}’ true
Bảng 9-15. Các thoát khoản vào của ký tự của biểu thức thông thường
Thoát Mô tả
\a ký tự cảnh báo (chuông), như trong C
\b dấu ngược backspace, như trong C
\B đồng nghĩa cho dấu chéo ngược (\) để giúp làm giảm nhu cầu về đúp bản dấu chéo ngược
\cX (trong đó X là ký tự bất kỳ) ký tự mà 5 bit trật tự thấp của nó là y hệt như các bit của X, và các bit khác của nó tất cả đều là 0
\e ký tự và tên trật tự đối sánh của nó là ESC, hoặc ký tự với giá trị 033 theo hệ số 8
\f mẫu nuôi, như trong C
\n dòng mới, như trong C
\r trả về sự thi hành, như trong C
\t thẻ tab nằm ngang, như trong C
\uwxyz (trong đó wxyz chính xác là 4 ký tự số hệ 16) ký tự UTF16 (Unicode, 16 bit) U+wxyz trong trật tự byte cục bộ
\Ustuvwxyz (trong đó stuvwxyz chính xác là 8 ký tự số hệ 16) được giữ lại cho một mở rộng Unicode giả cho 32 bit
\v thẻ tab thẳng đứng, như trong C
\xhhh (trong đó hhh là tuần tự bất kỳ của các ký tự số hệ 16) ký tự mà giá trị theo hệ 16 của nó là 0xhhh (một ký tự duy nhất bất kể có bao nhiêu ký tự số hệ 16 được sử dụng)
\0 ký tự mà giá trị của nó là 0 (byte null)
\xy (trong đó xy chính xác là 2 ký tự số hệ 8, và không phải là một tham chiếu ngược) ký tự mà giá trị theo hệ 8 của nó là 0xy
\xyz (trong đó xyz chính xác là 3 ký tự số hệ 8, và không phải là một tham chiếu ngược) ký tự mà giá trị theo hệ 8 của nó là 0xyz
Các ký tự số hệ 16 là 0-9, a-f, và A-F. Các ký tự số hệ 8 là 0-7.
Các thoát khoản vào ký tự luôn được lấy như là các ký tự thông thường. Ví dụ, \135 là ] trong
ASCII, nhưng \135 không kết thúc một biểu thức dấu ngoặc vuông.
Bảng 9-16. Các thoát tốc ký lớp của biểu thức thông thường
Thoát Mô tả
\d [[:digit:]]
\s [[:space:]]
\w [[:alnum:]_] (lưu ý dấu gạch chân được đưa vào)
\D [^[:digit:]]
\S [^[:space:]]
\W [^[:alnum:]_] (lưu ý dấu gạch chân được đưa vào)
Trong các biểu thức dấu ngoặc vuông, \d, \s, và \w đánh mất các dấu ngoặc vuông bên ngoài hơn, và \D, \S và \W là không hợp lệ. (Vì thế, ví dụ, [a-c\d] là tương đương với [a-c[:digit:]]. Hơn nữa, [a- c\D], nó là tương đương với [a-c^[:digit:]], là không hợp lệ).
Bảng 9-17. Các thoát ràng buộc biểu thức thông thường
Thoát Mô tả
\A chỉ khớp ở đầu của chuỗi (xem Phần 9.7.3.5 để thấy điều này khác thế nào, so với ^)
\m chỉ khớp ở đầu của một từ
\M chỉ khớp ở cuối của một từ
\y chỉ khớp ở đầu hoặc cuối của một từ
\Y chỉ khớp ở một điểm không phải là bắt đầu hoặc kết thúc của một từ
\Z chỉ khớp ở cuối của chuỗi (xem Phần 9.7.3.5 để thấy điều này khác thế nào so với $)
Một từ được định nghĩa như trong đặc tả của [[:<:]] and [[:>:]] ở trên. Các thoát ràng buộc là không hợp lệ trong các biểu thức dấu ngoặc vuông.
Bảng 9-18. Các tham chiếu ngược của biểu thức thông thường
Thoát Mô tả
\m (trong đó m là một ký tự số không phải là 0) một tham chiếu ngược tới biểu thức con thứ m
\mnn (trong đó m là một ký tự số không phải là 0, và nn là nhiều hơn vài ký tự số, và giá trị thập phân mnn không lớn hơn so với số lượng các dấu ngoặc đơn đóng bắt được được thấy cho tới nay) một tham chiếu ngược tới biểu thức con thứ mnn
Lưu ý: Có một sự tù mù vốn dĩ giữa các thoát khoản vào của ký tự hệ 8 và các tham chiếu ngược, nó được giải quyết bằng công nghệ tự động sau, như được gợi ý ở trên. Số 0 dẫn trước luôn chỉ ra một thoát hệ 8. Ký tự số không phải là 0, không có ký tự số nào khác theo sau, luôn là một tham chiếu ngược. Sự tuần tự nhiều ký tự số không bắt đầu bằng số 0 được lấy như một tham chiếu ngược nếu nó đi sau một biểu thức con phù hợp (nghĩa là, số đó là trong dãy hợp hệ cho một tham chiếu ngược), và nếu không thì nó được lấy như là hệ 8.