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 <\i\c*\s*> matches an opening XML tag without any attributes. matches any closing tag. <\i\c*(\s+\i\c*\s*=\s*("[^"]*"|'[^']*'))*\s*> matches an opening tag with any number of attributes. Putting it all together, <(\i\c*(\s+\i\c*\s*=\s*("[^"]*"|'[^']*'))*|/\i\c*)\s*> matches either an opening tag with attributes or a closing tag.

Không có hương vị regex nào khác được thảo luận trong hướng dẫn này hỗ trợ các lớp ký tự XML. Nếu các tệp XML của bạn là ASCII đơn giản, bạn có thể sử dụng [_. A-Za-z] cho \i và [-. _. A-Za-z0-9] cho \c. Nếu bạn muốn cho phép tất cả các ký tự Unicode mà tiêu chuẩn XML cho phép, thì bạn sẽ kết thúc với một số biểu thức chính quy khá dài. Thay vì \i bạn sẽ sử dụng

[. A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF

Thay vì \c bạn sẽ sử dụng

[-. 0-9. A-Z_a-z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\

?= * Có nghĩa là gì trong regex?

?= là một cái nhìn tích cực, một loại xác nhận có độ rộng bằng 0 . Điều nó nói là trận đấu được bắt phải được theo sau bởi bất cứ điều gì trong ngoặc đơn nhưng phần đó không được bắt. Ví dụ của bạn có nghĩa là trận đấu cần phải được theo sau bởi 0 hoặc nhiều ký tự và sau đó là một chữ số (nhưng một lần nữa, phần đó không được ghi lại).

làm gì. *) Có nghĩa là trong regex?

. means match any character in regular expressions. * means không hoặc nhiều lần xuất hiện của biểu thức chính DUY NHẤT trước nó .

\\ s+ nghĩa là gì trong regex?

Dấu cộng + là một bộ định lượng tham lam, có nghĩa là một hoặc nhiều lần. Ví dụ: biểu thức X+ khớp với một hoặc nhiều ký tự X. Do đó, biểu thức chính quy \s khớp với một ký tự khoảng trắng, trong khi \s+ sẽ khớp với một hoặc nhiều ký tự khoảng trắng .

+$ biểu thức chính quy là gì?

^[a-zA-Z]+$ khớp với bất kỳ chuỗi chữ cái nào (bao gồm các chữ cái a-z, lớn hoặc nhỏ) có kích thước từ 1 trở lên. The ^ and $ characters mean "start" and "end" of the line, so they only match full lines consisting of one "word".