Làm cách nào để đại diện cho tất cả các ký tự trong regex?

Vì một số lớp ký tự nhất định được sử dụng thường xuyên nên có sẵn một loạt các lớp ký tự tốc ký. \d là viết tắt của [0-9]. Trong hầu hết các hương vị hỗ trợ Unicode, \d bao gồm tất cả các chữ số từ tất cả các tập lệnh. Các ngoại lệ đáng chú ý là Java, JavaScript và PCRE. Các hương vị Unicode này chỉ khớp với các chữ số ASCII với \d

\w là viết tắt của “ký tự từ”. Nó luôn khớp với các ký tự ASCII [A-Za-z0-9_]. Lưu ý việc bao gồm dấu gạch dưới và chữ số. Trong hầu hết các hương vị hỗ trợ Unicode, \w bao gồm nhiều ký tự từ các tập lệnh khác. Có rất nhiều điểm không nhất quán về những ký tự nào thực sự được đưa vào. Các chữ cái và chữ số từ các chữ cái và chữ tượng hình thường được bao gồm. Dấu chấm câu kết nối không phải là dấu gạch dưới và ký hiệu số không phải là chữ số có thể được bao gồm hoặc không. Lược đồ XML và XPath thậm chí bao gồm tất cả các ký hiệu trong \w. Một lần nữa, Java, JavaScript và PCRE chỉ khớp các ký tự ASCII với \w

\s là viết tắt của “ký tự khoảng trắng”. Một lần nữa, những ký tự này thực sự bao gồm, phụ thuộc vào hương vị regex. Trong tất cả các hương vị được thảo luận trong hướng dẫn này, nó bao gồm [ \t\r\n\f]. Đó là. \s khớp với khoảng trắng, tab, xuống dòng, nguồn cấp dữ liệu dòng hoặc nguồn cấp dữ liệu biểu mẫu. Hầu hết các hương vị cũng bao gồm tab dọc, với Perl [trước phiên bản 5. 18] và PCRE [trước phiên bản 8. 34] là những ngoại lệ đáng chú ý. Trong các hương vị hỗ trợ Unicode, \s thường bao gồm tất cả các ký tự từ danh mục “dấu phân cách” Unicode. Java và PCRE một lần nữa là ngoại lệ. Nhưng JavaScript khớp với tất cả khoảng trắng Unicode với \s

Các lớp ký tự tốc ký có thể được sử dụng cả bên trong và bên ngoài dấu ngoặc vuông. \s\d khớp với một ký tự khoảng trắng theo sau là một chữ số. [\s\d] khớp với một ký tự là khoảng trắng hoặc một chữ số. Khi được áp dụng cho 1 + 2 = 3, biểu thức chính quy trước khớp với  2 [dấu cách hai], trong khi biểu thức sau khớp với 1 [một]. [\da-fA-F] khớp với một chữ số thập lục phân và tương đương với [0-9a-fA-F] nếu hương vị của bạn chỉ khớp với các ký tự ASCII với \d

Các lớp ký tự tốc ký bị phủ định

Ba tốc ký trên cũng có các phiên bản phủ định. \D giống như [^\d], \W là viết tắt của [^\w] và \S tương đương với [^\s]

Hãy cẩn thận khi sử dụng các tốc ký phủ định bên trong dấu ngoặc vuông. [\D\S] không giống như [^\d\s]. Cái sau khớp với bất kỳ ký tự nào không phải là chữ số cũng như khoảng trắng. Nó khớp với x, nhưng không khớp với 8. Tuy nhiên, cái trước khớp với bất kỳ ký tự nào không phải là chữ số hoặc không phải là khoảng trắng. Bởi vì tất cả các chữ số không phải là khoảng trắng và tất cả các ký tự khoảng trắng không phải là chữ số, [\D\S] khớp với bất kỳ ký tự nào;

Thêm các lớp ký tự tốc ký

Mặc dù hỗ trợ cho \d, \s và \w khá phổ biến, nhưng có một số hương vị biểu thức chính quy hỗ trợ các lớp ký tự tốc ký bổ sung. Perl 5. 10 giới thiệu \h và \v. \h khớp với khoảng trắng ngang, bao gồm tab và tất cả các ký tự trong danh mục Unicode “dấu cách”. Nó giống như [\t\p{Zs}]. \v khớp với "khoảng trắng dọc", bao gồm tất cả các ký tự được coi là ngắt dòng trong tiêu chuẩn Unicode. Nó giống như [\n\cK\f\r\x85\x{2028}\x{2029}]

PCRE cũng hỗ trợ \h và \v bắt đầu từ phiên bản 7. 2. PHP thực hiện kể từ phiên bản 5. 2. 2, Java kể từ phiên bản 8 và công cụ JGsoft kể từ phiên bản 2

Nếu hương vị của bạn hỗ trợ \h và \v thì bạn chắc chắn nên sử dụng chúng thay vì \s bất cứ khi nào bạn muốn chỉ khớp một loại khoảng trắng. Sử dụng \h thay vì \s để khớp với dấu cách và tab đảm bảo khớp biểu thức chính quy của bạn không vô tình tràn sang dòng tiếp theo

Trong nhiều hương vị regex khác, \v chỉ khớp với ký tự tab dọc. Perl, PCRE và PHP không bao giờ hỗ trợ điều này, vì vậy họ có thể tự do cung cấp cho \v một ý nghĩa khác. Java 4 đến 7 và JGsoft V1 đã sử dụng \v để chỉ khớp với tab dọc. Dù sao thì Java 8 và JGsoft V2 đã thay đổi ý nghĩa của mã thông báo này. Tab dọc cũng là một ký tự khoảng trắng dọc. Để tránh nhầm lẫn, đoạn trên sử dụng \cK để biểu thị tab dọc

Boost hỗ trợ \h bắt đầu với phiên bản 1. 42. tăng 1. 42 trở lên chỉ hỗ trợ \v dưới dạng tốc ký bên ngoài các lớp ký tự. [\v] chỉ khớp với tab dọc trong Boost

hồng ngọc 1. 9 trở lên có phiên bản \h riêng. Nó khớp với một chữ số thập lục phân giống như [0-9a-fA-F]. \v là một tab dọc trong Ruby

Các lớp ký tự XML

Lược đồ XML, XPath và các biểu thức chính quy hỗ trợ thêm bốn cách viết tắt không được hỗ trợ bởi bất kỳ hương vị biểu thức chính quy nào khác. \i khớp với bất kỳ ký tự nào có thể là ký tự đầu tiên của tên XML. \c khớp với bất kỳ ký tự nào có thể xuất hiện sau ký tự đầu tiên trong tên XML. \I và \C là các tốc ký phủ định tương ứng. Lưu ý rằng cú pháp tốc ký \c xung đột với cú pháp được sử dụng trong nhiều hương vị biểu thức chính quy khác

Bạn có thể sử dụng bốn tốc ký này cả lớp ký tự bên trong và bên ngoài bằng cách sử dụng ký hiệu dấu ngoặc. Chúng rất hữu ích để xác thực các giá trị và tham chiếu XML trong lược đồ XML của bạn. Biểu thức chính quy \i\c* khớp với một tên XML như xml. lược đồ

The regex matches an opening XML tag without any attributes. matches any closing tag.

Chủ Đề