Biểu thức chính quy, hoặc ngắn gọn là regex hoặc regexp, cực kỳ mạnh mẽ và đáng kinh ngạc trong việc tìm kiếm và thao tác với các chuỗi văn bản, đặc biệt là trong việc xử lý các tệp văn bản. Một dòng regex có thể dễ dàng thay thế vài chục dòng mã lập trình Show Regex được hỗ trợ trong tất cả các ngôn ngữ kịch bản (chẳng hạn như Perl, Python, PHP và JavaScript); . Bắt đầu với regex có thể không dễ dàng do cú pháp phức tạp của nó, nhưng nó chắc chắn đáng để bạn đầu tư thời gian Regex theo ví dụPhần này dành cho những người cần làm mới bộ nhớ của họ. Đối với những người mới làm quen, hãy chuyển sang phần tiếp theo để tìm hiểu cú pháp, trước khi xem các ví dụ này Tóm tắt cú pháp Regex
Thí dụ. Số [0-9]+ hoặc \d+
Ví dụ về mã (Python, Java, JavaScript, Perl, PHP)Mã Ví dụ trong PythonXem "" để được bảo hiểm đầy đủ Python hỗ trợ Regex thông qua mô-đun find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++22. Python cũng sử dụng dấu gạch chéo ngược ( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 238) cho các chuỗi thoát (i. e. , bạn cần viết 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 466 cho 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 238, find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++27 cho find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++17), nhưng nó hỗ trợ chuỗi thô ở dạng find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++29, loại bỏ qua việc giải thích các chuỗi thoát - rất phù hợp để viết biểu thức chính quy Mã Ví dụ trong JavaXem "Biểu thức chính quy (Regex) trong Java" để biết đầy đủ Java hỗ trợ Regex trong gói find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 đầu ra là find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++ Mã Ví dụ trong PerlXem "" để được bảo hiểm đầy đủ Perl sử dụng rộng rãi các biểu thức chính quy với nhiều cú pháp và toán tử tích hợp sẵn. Trong Perl (và JavaScript), một biểu thức chính quy được phân định bằng một cặp dấu gạch chéo lên (mặc định), ở dạng find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++31. Bạn có thể sử dụng các toán tử tích hợp
Trong Perl, bạn có thể sử dụng chuỗi không nội suy được trích dẫn một lần find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++34 để viết biểu thức chính quy nhằm vô hiệu hóa việc giải thích dấu gạch chéo ngược ( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 238) của Perl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Ví dụ mã trong JavaScriptXem "" để được bảo hiểm đầy đủ Trong JavaScript (và Perl), một biểu thức chính quy được phân định bằng một cặp dấu gạch chéo về phía trước, ở dạng find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++36. Có hai bộ phương thức, phát hành thông qua đối tượng find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++37 hoặc đối tượng find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++38 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 Mã ví dụ trong PHP[LÀM] Thí dụ. Chuỗi số đầy đủ ^[0-9]+$ hoặc ^\d+$
Thí dụ. Số nguyên dương [1-9][0-9]*. 0 hoặc [1-9]\d*. 0
Thí dụ. Chữ số nguyên đầy đủ ^[+-]?[1-9][0-9]*. 0$ hoặc ^[+-]?[1-9]\d*. 0$
Thí dụ. Mã định danh (hoặc Tên) [a-zA-Z_][0-9a-zA-Z_]* hoặc [a-zA-Z_]\w*
Thí dụ. Tên tệp hình ảnh ^\w+\. (gif. png. jpg. jpeg)$
Thí dụ. Địa chỉ email ^\w+([. -]?\w+)*@\w+([. -]?\w+)*(\. \w{2,3})+$
Bài tập. Giải thích biểu thức chính quy này, cung cấp một biểu diễn khác của địa chỉ email. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2359 Thí dụ. Hoán đổi từ bằng cách sử dụng Tham chiếu ngược được đặt trong ngoặc đơn ^(\S+)\s+(\S+)$ và $2 $1
Mã Ví dụ trong PythonPython giữ các tham chiếu ngược được đặt trong ngoặc đơn trong 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2387 giữ toàn bộ trận đấu Mã Ví dụ trong JavaJava giữ các tham chiếu phía sau được ngoặc đơn trong 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Thí dụ. Địa chỉ HTTP ^http. \/\/\S+(\/\S+)*(\/)?$
Thí dụ. Các mẫu Regex trong AngularJSCác mẫu biểu thức chính quy khá phức tạp sau đây được sử dụng bởi AngularJS theo cú pháp JavaScript Thí dụ. Regex mẫu trong PerlCú pháp biểu thức chính quy (Regex)Biểu thức chính quy (hoặc Regex) là một mẫu (hoặc bộ lọc) mô tả một tập hợp các chuỗi khớp với mẫu. Nói cách khác, một biểu thức chính quy chấp nhận một bộ chuỗi nhất định và từ chối phần còn lại Một biểu thức chính quy bao gồm một chuỗi các ký tự, siêu ký tự (chẳng hạn như find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++5, find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++17, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2373, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 238s, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4601, find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++85, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2371) và các toán tử (chẳng hạn như find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++6, find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++7, find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++8, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 237, find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++9). Chúng được xây dựng bằng cách kết hợp nhiều biểu thức con nhỏ hơn So khớp một ký tựCác khối xây dựng cơ bản của biểu thức chính quy là các mẫu khớp với một ký tự. Hầu hết các ký tự, bao gồm tất cả các chữ cái (_______20_______09 và 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4610) và chữ số ( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4611), khớp với chính nó. Ví dụ: regex x khớp với chuỗi con "x" ; Các ký tự không phải chữ và số không có ý nghĩa đặc biệt trong biểu thức chính quy cũng khớp với chính nó. Ví dụ: find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++1 khớp với find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++2; Các ký tự đặc biệt và chuỗi thoát của RegexKý tự đặc biệt của RegexCác ký tự này có ý nghĩa đặc biệt trong regex (tôi sẽ trình bày chi tiết ở các phần sau)
trình tự thoátCác ký tự được liệt kê ở trên có ý nghĩa đặc biệt trong regex. Để khớp các ký tự này, chúng ta cần thêm vào trước nó một dấu gạch chéo ngược ( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 238), được gọi là chuỗi thoát. Ví dụ, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 462 khớp với 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 463; Regex cũng nhận ra các chuỗi thoát phổ biến như 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 468 cho dòng mới, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 469 cho tab, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 200 cho ký tự xuống dòng, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 201 cho số bát phân có tới 3 chữ số, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 202 cho mã hex gồm hai chữ số, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 203 cho mã Unicode 4 chữ số, Mã Ví dụ trong PythonVí dụ mã trong JavaScript[LÀM] Mã Ví dụ trong Java[LÀM] So khớp một chuỗi ký tự (Chuỗi hoặc Văn bản)Biểu thức conMột biểu thức chính quy được xây dựng bằng cách kết hợp nhiều biểu thức con hoặc nguyên tử nhỏ hơn. Ví dụ: regex 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4647 khớp với chuỗi " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4647". Theo mặc định, đối sánh phân biệt chữ hoa chữ thường nhưng có thể được đặt thành không phân biệt chữ hoa chữ thường thông qua công cụ sửa đổi HOẶC LÀ (. ) Nhà điều hànhBạn có thể cung cấp các lựa chọn thay thế bằng cách sử dụng toán tử "HOẶC", được biểu thị bằng một thanh dọc 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4649. Ví dụ: regex 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4650 chấp nhận chuỗi " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4651", " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4652", " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4653" hoặc " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4654" Danh sách khung (Lớp ký tự) [. ], [^. ], [. -. ]Biểu thức ngoặc là một danh sách các ký tự được bao quanh bởi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4623, còn được gọi là lớp ký tự. Nó khớp với BẤT KỲ MỘT ký tự nào trong danh sách. Tuy nhiên, nếu ký tự đầu tiên của danh sách là dấu mũ (_______0_______9), thì nó khớp với BẤT KỲ MỘT ký tự nào KHÔNG có trong danh sách. Ví dụ: biểu thức chính quy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4657 khớp với một chữ số duy nhất find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++41, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4659, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4654, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4661 hoặc 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4662; Thay vì liệt kê tất cả các ký tự, bạn có thể sử dụng một biểu thức phạm vi bên trong dấu ngoặc. Một biểu thức phạm vi bao gồm hai ký tự được phân tách bằng dấu gạch nối ( ^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$0). Nó khớp với bất kỳ ký tự đơn nào sắp xếp giữa hai ký tự, bao gồm. Ví dụ: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4670 giống như 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4671. Bạn có thể bao gồm một dấu mũ ( find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++9) phía trước phạm vi để đảo ngược kết quả phù hợp. Ví dụ, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4673 tương đương với 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4674 Hầu hết các ký tự biểu thức chính quy đặc biệt đều mất ý nghĩa trong danh sách dấu ngoặc và có thể được sử dụng như hiện tại;
Đặt tên cho các lớp ký tự trong danh sách ngoặc đơn (Chỉ dành cho Perl?)Các lớp ký tự được đặt tên (POSIX) được xác định trước trong các biểu thức ngoặc. họ đang
Ví dụ: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2012 có nghĩa là 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2013. (Lưu ý rằng các dấu ngoặc vuông trong các tên lớp này là một phần của tên tượng trưng và phải được thêm vào cùng với các dấu ngoặc vuông phân định danh sách dấu ngoặc. ) Siêu ký tự. , \w, \W, \d, \D, \s, \SSiêu ký tự là một biểu tượng có ý nghĩa đặc biệt bên trong biểu thức chính quy
ví dụ Dấu gạch chéo ngược (\) và chuỗi thoát RegexRegex sử dụng dấu gạch chéo ngược (_______10_______8) cho hai mục đích
Hãy lưu ý rằng trong nhiều ngôn ngữ lập trình (C, Java, Python), dấu gạch chéo ngược ( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 238) cũng được sử dụng cho các chuỗi thoát trong chuỗi, e. g. , 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2056 cho dòng mới, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2057 cho tab, và bạn cũng cần viết 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2058 cho 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 238. Do đó, để viết mẫu biểu thức chính quy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 466 (khớp với một 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 238) trong các ngôn ngữ này, bạn cần viết 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2062 (hai cấp thoát. ). Tương tự, bạn cần viết 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2063 cho siêu ký tự regex find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++17. Điều này là cồng kềnh và dễ bị lỗi Chỉ số xuất hiện (Toán tử lặp lại). +, *, ?, {m}, {m,n}, {m,}Một biểu thức con regex có thể được theo sau bởi một chỉ báo xuất hiện (còn gọi là toán tử lặp lại)
Ví dụ. Regex 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2074 chấp nhận "_______30_______75", " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2076" và " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2077" sửa đổiBạn có thể áp dụng các công cụ sửa đổi cho biểu thức chính quy để điều chỉnh hành vi của nó, chẳng hạn như toàn cầu, phân biệt chữ hoa chữ thường, nhiều dòng, v.v. Các cách áp dụng công cụ sửa đổi khác nhau giữa các ngôn ngữ Trong Perl, bạn có thể đính kèm các công cụ sửa đổi sau biểu thức chính quy, ở dạng 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2078. Ví dụ như Trong Java, bạn áp dụng các công cụ sửa đổi khi biên dịch biểu thức chính quy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2079. Ví dụ, Các chế độ bổ trợ thường được sử dụng là
Tham lam, lười biếng và quay lui cho các toán tử lặp lạiSự tham lam của các toán tử lặp lại *, +, ?, {m,n}. Các toán tử lặp lại là các toán tử tham lam và theo mặc định nắm bắt càng nhiều ký tự càng tốt cho một kết quả khớp. Ví dụ: biểu thức chính quy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2074 cố gắng khớp với " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2077", sau đó là " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2076", rồi " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2075" Định lượng lười biếng *?, +?, ??, {m,n}?, {m,}?,. Bạn có thể đặt thêm một find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++8 sau các toán tử lặp lại để hạn chế tính tham lam của nó (i. e. , dừng lại ở trận đấu ngắn nhất). Ví dụ, input = "The quay lui. Nếu một biểu thức chính quy đạt đến trạng thái không thể hoàn thành một trận đấu, thì nó sẽ quay lại bằng cách hủy một ký tự khỏi trận đấu tham lam. Ví dụ: nếu regex input = "The00 khớp với chuỗi " input = "The01", thì input = "The02 khớp đầu tiên với " input = "The01"; Lượng từ sở hữu *+, ++, ?+, {m,n}+, {m,}+. Bạn có thể đặt thêm _______ 0_______6 cho các toán tử lặp lại để vô hiệu hóa tính năng quay lui, thậm chí nó có thể dẫn đến lỗi khớp. e. g, input = "The08 sẽ không khớp với input = "The09. Tính năng này có thể không được hỗ trợ ở một số ngôn ngữ Position Anchors ^, $, \b, \B, \<, \>, \A, \ZCác neo vị trí KHÔNG khớp với ký tự thực, nhưng khớp với vị trí trong một chuỗi, chẳng hạn như đầu dòng, cuối dòng, đầu từ và cuối từ
Nắm bắt kết quả phù hợp thông qua tham chiếu ngược được đặt trong ngoặc đơn & biến phù hợp $1, $2,Dấu ngoặc đơn
Các tham chiếu ngược này (hoặc các nhóm chụp) được lưu trữ trong các biến đặc biệt input = "The40 tạo hai tham chiếu ngược khớp với hai từ đầu tiên. Các từ phù hợp được lưu trữ lần lượt trong "x" 9 và 9 0 (hoặc 9 1 và 9 2)Tham chiếu ngược rất quan trọng để thao tác chuỗi. Tham chiếu ngược có thể được sử dụng trong chuỗi thay thế cũng như mẫu. Ví dụ như, (Nâng cao) Lookahead/Lookbehind, Groupings và ConditionalTính năng này có thể không được hỗ trợ ở một số ngôn ngữ Cái nhìn tích cực (?=mẫu)input = "The54 được gọi là cái nhìn tích cực. Nó thực hiện khớp, nhưng không bắt được khớp, chỉ trả về kết quả. phù hợp hoặc không phù hợp. Nó còn được gọi là xác nhận vì nó không sử dụng bất kỳ ký tự nào trong khớp. Ví dụ: biểu thức chính quy phức tạp sau đây được sử dụng để khớp với địa chỉ email của AngularJS ^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$ Các mẫu nhìn tích cực đầu tiên input = "The55 đặt độ dài tối đa là 254 ký tự. Cái nhìn tích cực thứ hai input = "The56 đặt tối đa 64 ký tự trước dấu hiệu input = "The57 cho tên người dùng Cái nhìn tiêu cực (?. mẫu)Nghịch đảo của input = "The54. Khớp nếu thiếu input = "The59. Ví dụ: input = "The60 phù hợp với input = "The61 trong input = "The62 (không tiêu thụ input = "The63); . Trong khi đó input = "The65 khớp với input = "The61 trong input = "The64, nhưng không khớp với find() found substring "00123" starting at index 3 and ending at index 8 find() found substring "456" starting at index 11 and ending at index 14 find() found substring "0" starting at index 15 and ending at index 16 matches() found nothing lookingAt() found nothing abc**xyz456_0 abc++xyz++_++43 Giao diện tích cực (?<=pattern)[LÀM] Giao diện tiêu cực (?mẫu)[LÀM] Nhóm không bắt giữ (?. mẫu)Nhớ lại rằng bạn có thể sử dụng Tham chiếu ngược được đặt trong ngoặc đơn để nắm bắt các kết quả khớp. Để tắt chụp, hãy sử dụng input = "The69 bên trong dấu ngoặc đơn ở dạng input = "The70. Nói cách khác, input = "The69 vô hiệu hóa việc tạo nhóm chụp, để không tạo nhóm chụp không cần thiết Thí dụ. [LÀM] Named Capturing Group (? |