Học các biểu thức chính thức một cách có hệ thống: bài viết cơ bản

Tác giả:Giấc mơ nhỏ, Tạo: 2017-03-29 10:52:47, Cập nhật: 2020-11-18 12:39:53

Học các biểu thức chính thức một cách có hệ thống: bài viết cơ bản

Một biểu thức chính xác là gì? Một biểu thức chính xác là một số ký tự cụ thể được xác định trước, và sự kết hợp của các ký tự cụ thể đó tạo thành một chuỗi chuỗi các quy tắc, được sử dụng để biểu diễn một loại logic lọc cho các chuỗi.

  • Các mục đích sau đây có thể đạt được bằng cách sử dụng biểu thức chính thức:

    给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
    可以通过正则表达式,从字符串中获取我们想要的特定部分。
    

    Để giúp mọi người dễ dàng học hơn, trước tiên tôi đề nghị một phần mềm xác minh biểu thức chính xác Regextor, cụ thể là bạn có thể xem bài viết của tôi, trong đó tôi đề nghị nhiều phần mềm tốt cho Mac.

    img

Dưới đây là những lời giải thích về các quy tắc của biểu thức chính thức:

  • Khớp với các ký tự văn bản thông thường

    Một biểu thức chính thức chỉ có thể chứa văn bản thông thường, đại diện cho việc khớp chính xác với văn bản này; ví dụ:

    Các biểu thức chính thức:songĐang chờ kết hợp: xiaoosongge, xiao songge Kết quả so sánh: xiaosongGe, xiao Songge Theo mặc định, biểu thức chính thức được viết bằng chữ viết nhỏ, vì vậy song sẽ không khớp với Song. Tuy nhiên, hầu hết các triển khai biểu thức chính thức đều cung cấp một tùy chọn biểu thức không viết bằng chữ viết nhỏ.

  • Khớp bất kỳ ký tự nào

    . được sử dụng để khớp với bất kỳ ký tự nào, ví dụ:

    biểu thức chính thức: c.t Bài viết: Cat cet caaat dog Kết quả so sánh:cat cetCaat Dog Phân tích: c.t sẽ khớp với một chuỗi bắt đầu bằng "c" và kết thúc bằng "t", giữa là một ký tự tùy chọn.

    同理,多个连续的.可以匹配多个连续的任意字符:

    Các biểu thức chính thức: c...t Đang chờ kết hợp: cat cet caat dog Kết quả so sánh: cat cetcaatchó

  • Khớp với các ký tự đặc biệt

    . chứa một ý nghĩa đặc biệt trong biểu thức chính thức, là một ký tự đặc biệt.. cũng là một ký tự đặc biệt, có thể đóng vai trò chuyển nghĩa đối với ký tự đặc biệt.. nếu bạn muốn phù hợp là một ký tự thực sự..

    biểu thức chính thức: c.t Đợi kết hợp văn bản: cat c.t dog Kết quả so sánh: catc.tchó Lưu ý: vì \ cũng là một ký tự đặc biệt, bạn cần phải sử dụng hai đường ngược \ để khớp với một ký tự \ thực sự:

    biểu thức chính thức: c\t Đợi kết hợp văn bản: cat c\t dog Kết quả so sánh: catc\tchó

  • Sử dụng tập hợp ký tự

    Như đã đề cập ở trên. Có thể khớp với bất kỳ ký tự nào, nhưng nếu tôi muốn khớp với một vài ký tự cụ thể thì sao? Khớp với một tập hợp các ký tự cụ thể có thể sử dụng [và] ký tự siêu nhỏ.

    biểu thức chính thức: c[ab]t Đang chờ kết hợp văn bản: cat cbt cet Kết quả so sánh:cat cbtcet Phân tích: [ab] sẽ khớp "a hoặc b . Vì vậy, c[ab]t sẽ khớp cat cbt mà không khớp cet".

  • Sử dụng khoảng cách ký tự

    Trong ví dụ trên, nếu tôi muốn khớp với cet, tôi sẽ thêm một trong [? Nếu tôi muốn khớp với bất kỳ chữ cái chữ viết nhỏ nào, tôi sẽ viết hàng chục trong đó? Có thể, nhưng quá dài.

    biểu thức chính thức: c[a-z]t Đang chờ kết hợp: cat cbt czt c2t Kết quả so sánh:cat cbt cztc2t Phân tích: c[a-z]t biểu thị "c bắt đầu bằng c, kết thúc bằng t", giữa là chữ cái "a" - bất kỳ chữ cái nào của chữ cái "z".

    Các trang web khác cũng có:

    [0-9] cũng giống như [0123456789]. Khớp tất cả các số. [A-F] Khớp các ký tự chữ cái từ A đến F. [A-Z] Khớp với tất cả các ký tự từ A đến Z. [a-z] Khớp với tất cả các ký tự chữ viết nhỏ từ a đến z. [A-z] Khớp tất cả các ký tự trong ASCII từ A đến ASCII z ((không chỉ khớp tất cả các ký tự mà còn khớp các ký tự trong bảng ASCII từ A đến z, chẳng hạn như [ và ^, v.v.)). [A-Za-z0-9] Khớp với tất cả các chữ cái và số viết bằng chữ viết nhỏ.

  • Khớp với các tập hợp phi

    Các tập hợp ký tự thường được sử dụng để chỉ định một tập hợp các ký tự cần khớp. Tuy nhiên, đôi khi bạn muốn loại trừ một tập hợp các ký tự mà bạn không muốn khớp. Điều này có thể được thực hiện bằng cách từ chối tập hợp các ký tự. Ví dụ:

    biểu thức chính thức: c[^a-z]t Đang chờ kết hợp: cat cbt czt c2t cAt Kết quả so sánh: cat cbt cztc2t cAtPhân tích: Đây là một ví dụ hoàn toàn ngược lại với ví dụ trước đây..[a-z] phù hợp với tất cả các ký tự viết nhỏ, trong khi [^a-z] phù hợp với tất cả các ký tự không viết nhỏ..

    Lưu ý, ký tự ^ là loại bỏ tất cả các ký tự trong tập các ký tự.

  • Chữ nguyên tố

    Chữ nguyên tử có ý nghĩa đặc biệt trong biểu thức chính thức, trên đó chúng tôi đã nói một vài ký tự nguyên tử, ví dụ như.....................................

    Tất cả các siêu ký tự đều có thể được chuyển đổi ngược đường cong trước, và khi chuyển đổi, ký tự sẽ phù hợp với chính nó chứ không phải ý nghĩa đặc biệt của nó. Ví dụ, [ sẽ phù hợp với " [ ":

    biểu thức chính thức: a[b] Đợi kết hợp văn bản: a[b ab a[[b Kết quả so sánh:a[bab a[[b Lưu ý: \ được sử dụng để chuyển đổi các ký tự, điều này cũng có nghĩa là \ cũng là một ký tự. Vì vậy, nếu bạn cần phải phù hợp với " \ " thực sự, bạn có thể sử dụng \:

    biểu thức chính thức: a\b Đợi kết hợp văn bản: a\b a\b a[[b Kết quả sau khi khớp: a\ba\ba[[b

  • Các ký tự trống

    Đôi khi bạn có thể cần phải phù hợp với các ký tự trống không thể in trong văn bản. Ví dụ, bạn muốn có thể tìm tất cả các ký tự Tab, hoặc tất cả các ký tự thay thế. Bạn có thể sử dụng các ký tự đặc biệt trong bảng dưới đây:

    img

    Ví dụ, \r\n sẽ khớp với một sự kết hợp chuyển dòng quay trở lại, trong Windows biểu thị một thay dòng tập tin. Trong Linux và các hệ thống Unix, chỉ cần sử dụng \n.

  • Khớp với các kiểu ký tự cụ thể

    Có một số siêu ký tự đặc biệt có thể được sử dụng để khớp với các tập hợp ký tự phổ biến. Những siêu ký tự này được gọi là lớp ký tự khớp. Bạn sẽ thấy chúng rất tiện dụng.

    Khớp số hoặc không số Như đã đề cập ở trên,[0-9] có thể khớp với tất cả các số. Nếu bạn không muốn khớp bất kỳ số nào, bạn có thể sử dụng [^0-9]. Dưới đây là danh sách các ký tự lớp con số và phi số:

    img

    biểu thức chính thức: c\dt Đang chờ kết hợp: cat c2t czt c9t Kết quả so sánh: catc2tcztc9t

    biểu thức chính thức: c\Dt Đang chờ kết hợp: cat c2t czt c9t Kết quả so sánh:catc2tcztc9t Khớp các ký tự chữ cái và phi chữ cái Một ký tự khác thường được sử dụng là \w và \W:

    img

    biểu thức chính thức: c\wt Đang chờ kết hợp văn bản: cat c2t czt c-t c\t Kết quả so sánh:cat c2tc-t c\ t

    biểu thức chính thức: c\Wt Đang chờ kết hợp văn bản: cat c2t c-t c\t Kết quả kết hợp: cat c2tc-t c\tKhớp giữa không trống và không trống Các lớp tương ứng cuối cùng sẽ gặp phải là các lớp trống:

    img

    biểu thức chính thức: c\st Đợi kết hợp văn bản: cat c t c2t c \ t Kết quả so sánh: catc tc2t c\ t

    biểu thức chính thức: c\St Đang chờ kết hợp văn bản: cat c t c2t c \ t Kết quả so sánh:catc tc2t c\t

  • Khớp một hoặc nhiều ký tự

    + ký tự cho thấy kết hợp một hoặc nhiều ký tự. Ví dụ, a sẽ kết hợp "a" và a + sẽ kết hợp một hoặc nhiều "a".

    Phương thức chính thức:cat Đang chờ kết hợp văn bản:ct cat caat caaat Kết quả so sánh:ctcatcaat caat

    Các biểu thức chính thức: ca + t Đang chờ kết hợp văn bản:ct cat caat caaat Kết quả so sánh:ctcat caat caaatKhi sử dụng + trên một tập chữ, bạn cần đặt ký hiệu + bên ngoài tập chữ:

    biểu thức chính thức: c[0-9] + t Đang chờ kết hợp văn bản:ct c0t cat c123t Kết quả so sánh:ctc0tmèoc123tPhân tích: c[0-9]+t biểu thị một chuỗi bắt đầu bằng "c và kết thúc bằng t", giữa là một hoặc nhiều số.

    Tất nhiên, [0-9+] cũng là một biểu thức chính thức hợp pháp, nhưng nó biểu thị một tập hợp các ký tự có ký hiệu "0" - "9" và "+".

    Nói chung, các ký tự meta như. và + được sử dụng như một nghĩa đen khi sử dụng các tập hợp ký tự, do đó không cần phải chuyển đổi. Nhưng việc chuyển đổi cho chúng cũng ổn, vì vậy, chức năng của [0-9+] và [0-9+] là như nhau.

    Lưu ý: + là một siêu ký tự, để khớp "+" cần sử dụng chuyển nghĩa +。

  • Khớp với 0 hoặc nhiều ký tự

    Nếu bạn muốn kết hợp 0 hoặc nhiều ký tự hơn, bạn có thể sử dụng ký tự *.

    biểu thức chính thức: ca*t Đang chờ kết hợp văn bản:ct cat caat cbt Kết quả so sánh:ct cat caatcbt Lưu ý:* Biểu tượng là các ký tự. Để có thể khớp với "*", cần chuyển nghĩa *.

  • Khớp 0 hoặc 1 ký tự

    ? phù hợp với 0 hoặc một ký tự. Vì vậy,? rất phù hợp để phù hợp với một ký tự tùy chọn trong văn bản.

    biểu thức chính thức: ca?t Đang chờ kết hợp văn bản:ct cat caat cbt Kết quả so sánh:ct catcaat cbt Lưu ý:? ký hiệu là các ký tự.

  • Sử dụng số lần khớp

    Các biểu thức chính thức cho phép chỉ định số lần khớp. Số lần có thể được chỉ định giữa các hàm { }. Lưu ý: { và } cũng là các ký tự lớn, cần chuyển nghĩa khi sử dụng nghĩa đen.

    Số lần khớp chính xác Để xác định số lần khớp, bạn có thể nhập số giữa { và }. Ví dụ, {3} sẽ khớp với các ký tự hoặc tập hợp xuất hiện 3 lần trước:

    biểu thức chính thức: ca{3}t Đang chờ kết hợp văn bản: ct cat caaat cbt Kết quả so sánh: ct catcaaatcbt Ít nhất là số lần khớp Chúng ta cũng có thể chỉ định giá trị tối thiểu của sự khớp. Ví dụ, {2,} có nghĩa là khớp 2 lần hoặc nhiều hơn:

    Các biểu thức chính thức: ca{1,} t Đợi kết hợp văn bản: ct cat caaat cbt Kết quả so sánh:ctcat caaatcbt Khớp số số Chúng ta cũng có thể sử dụng giá trị tối thiểu và tối đa để xác định số lần khớp. Ví dụ, {2,3} có nghĩa là khớp ít nhất 2 lần và nhiều nhất 3 lần.

    Các biểu thức chính thức: ca{2,3} t Đang chờ kết hợp văn bản: ct cat caaat cbt Kết quả so sánh: ct catcaaatcbt Vì vậy? và {0,1} là cùng một chức năng + và {1,} là cùng một chức năng.

  • Khớp không tham lam

    Trước tiên, hãy xem ví dụ dưới đây:

    biểu thức chính thức: s.*g Lời bài hát: Xiao Song Kết quả so sánh: xiao song xiao song Phân tích: s.*g không phù hợp với hai "song" như dự đoán, mà phù hợp với tất cả các văn bản giữa "s" đầu tiên và "g" cuối cùng.

    Điều này là bởi vì * và + đều là sự khớp tham. Đó là, biểu thức chính thức luôn tìm kiếm sự khớp lớn nhất, chứ không phải nhỏ nhất, điều này được thiết kế một cách có chủ ý.

    Nhưng nếu bạn không muốn khớp tham thì hãy sử dụng các từ số này để khớp không tham (khớp càng ít ký tự càng tốt); từ số không tham được thêm sau từ số:

    img

    Ừ.Có thể sử dụng *? để thay đổi ví dụ trên:

    正则表达式:s.G? Lời bài hát: Xiao Song Kết quả so sánh: xiaosongxiaosong 分析:可以看到s.? g kết hợp hai "song".

  • Định nghĩa ranh giới chuỗi

    Các ký tự meta phù hợp với ranh giới của chuỗi là ^ và $, được sử dụng để bắt đầu và kết thúc chuỗi.

    ^ Sử dụng như sau:

    Hình thức chính thức: ^ xiao

    Đang chờ kết hợp:xiaosong Kết quả so sánh:xiaobài hát

    Đang chờ kết hợp: axiaosong Kết quả so sánh: axiaosong Phân tích: ^ xiao khớp với các chuỗi bắt đầu bằng "xiao".

    $ được sử dụng như sau:

    Ngôn ngữ chính thức: song$

    Đang chờ kết hợp:xiaosong Kết quả so sánh: xiaosong

    Đang chờ kết hợp:xiaosonga Kết quả so sánh: Xiaosonga Phân tích: song$ khớp với chuỗi kết thúc bằng "song".

    Sử dụng chung:

    Các biểu thức chính thức: ^ [0-9a-zA-Z] {4,} $

    Đang chờ kết hợp: a1b234ABC Kết quả so sánh:a1b234ABC

    +a1b23 = 4ABC Kết quả kết hợp: + a1b23 = 4ABC Phân tích: ^ [0-9a-zA-Z] {4,} $ kết hợp các con số hoặc chữ cái, và số lượng chữ số lớn hơn so với chuỗi bốn chữ số.

    Lưu ý: ^ là âm nếu ở đầu tập hợp; nếu ở ngoài tập hợp, nó sẽ khớp với vị trí bắt đầu của chuỗi. Mọi người có thể thử sự khác biệt giữa [^0-9] và ^[0-9].

  • Sử dụng nhiều dòng

    Tuy nhiên, có thể bật chế độ nhiều dòng. Trong chế độ nhiều dòng, công cụ biểu thức thường sẽ thay đổi ký tự thay thế như dấu phân ly của chuỗi, ^ sẽ phù hợp với đầu văn bản hoặc đầu một dòng, và $ có thể phù hợp với cuối văn bản hoặc cuối một dòng.

    Hãy thay đổi ví dụ trước đây:

    Các biểu thức chính thức: ((?m) ^ [0-9a-zA-Z] {4,} $

    Đang chờ kết hợp văn bản: a1b234ABC +a1b23 = 4ABC ABC123456

    Kết quả so sánh:a1b234ABC+a1b23=4ABCABC123456Phân tích: ((?m) ^ [0-9a-zA-Z]{4,} $ sẽ khớp với mỗi dòng sử dụng số hoặc chữ cái, và số lượng chữ số lớn hơn so với chuỗi bốn chữ số.

    Lưu ý: Nếu sử dụng mô hình nhiều dòng, ((?m) phải được đặt ở đầu biểu thức chính thức. (?m) không được hỗ trợ trong hầu hết các thực hiện biểu thức chính thức. Một số thực hiện biểu thức chính thức cũng hỗ trợ sử dụng \A để bắt đầu chuỗi và \Z để kết thúc chuỗi. Nếu được hỗ trợ, các ký tự này có chức năng giống như ^, $.

Trước khi nói về cơ sở, sau đó bạn có thể xem bài viết tiếp theo để học một cách có hệ thống các biểu thức chính thức:

Được chuyển từ cuốn sách ngắn iOS_Chosunoko


Thêm nữa