Học biểu thức chính quy một cách có hệ thống (I): Những điều cơ bản
Biểu thức chính xác là gì?
Biểu thức chính xác là một chuỗi các ký tự cụ thể được định nghĩa trước, và các kết hợp của các ký tự cụ thể này, tạo thành một chuỗi chuỗi các quy tắc đệm, được sử dụng để thể hiện một logic lọc đối với chuỗi.
-
Thông qua biểu thức chính xác, chúng ta có thể đạt được các mục đích sau:
给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”); 可以通过正则表达式,从字符串中获取我们想要的特定部分。Để giúp mọi người học dễ dàng hơn, chúng tôi khuyên bạn nên sử dụng Regextor, một phần mềm xác minh biểu thức chính xác, bạn có thể xem bài viết của tôi, trong đó cũng có rất nhiều phần mềm tốt cho Mac.
Sau đây là những quy tắc của biểu thức chính xác:
-
Khớp với các ký tự văn bản thông thường
Biểu thức chính thức có thể chỉ chứa văn bản thông thường, đại diện cho một sự phù hợp chính xác với văn bản này. Ví dụ:
Biểu thức chính thức:
song
Bài viết này được đăng trên trang web của Xiao Songge.
Kết quả so sánh:songge,xiaoSongge
Biểu thức chính thức được hiển thị ở dạng chữ viết lớn và chữ viết nhỏ theo mặc định, vì vậy song sẽ không phù hợ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 cho biết không phân biệt chữ viết lớn và chữ viết nhỏ.
-
Khớp với bất kỳ ký tự nào
. được sử dụng để kết hợp với một ký tự tùy ý, ví dụ:
Biểu thức chính thức: c.t
Lời bài hát: Cat Cet Caat Dog
Kết quả so sánh:catcetcaaat dog
Phân tích: c.t sẽ phù hợp với một chuỗi bắt đầu bằng "c", kết thúc bằng "t" và giữa là các ký tự tùy ý.Tương tự, nhiều liên tiếp. có thể được kết hợp với nhiều ký tự tùy ý liên tiếp:
Biểu thức chính thức: c..t
Cat cet caat dog
Kết quả so sánh: cat cetcaatdog
-
Khớp với ký tự đặc biệt
. trong biểu thức chính thức có ý nghĩa đặc biệt, là một ký tự đặc biệt. .\ cũng là một ký tự đặc biệt, có thể hoạt động như một phiên dịch cho các ký tự đặc biệt..Chữ " . " có nghĩa là chữ " . " thật sự.
Biểu thức chính thức: c.t
Cat c.t dog
Kết quả so sánh: catc.tdog
Lưu ý: Vì \ cũng là một ký tự đặc biệt, nên bạn cần sử dụng hai dòng ngược để có thể kết hợp với một ký tự \ thật.\:Biểu thức chính thức: c\t
Chờ kết hợp văn bản: cat c\t dog
Kết quả so sánh: catc\tdog
-
Sử dụng tập hợp ký tự
Nhưng nếu tôi muốn kết hợp một số ký tự cụ thể thì sao?[Và [đặc tính đầu].
Biểu thức chính thức: c[ab]t
Cat cbt cet
Kết quả so sánh:catcbtcet
Phân tích:[ab] sẽ phù hợp với "a" hoặc "b"[ab]t sẽ phù hợp với "cat" và "cbt" mà không phù hợp với "cet" <unk>
-
Sử dụng khoảng cách nhóm ký tự
Trong ví dụ trên, nếu tôi muốn kết hợp cet,[Có thêm một chữ nữa không? Vậy nếu tôi muốn so sánh với bất kỳ chữ cái nhỏ nào, tôi có thể viết hàng chục chữ nữa không?[a-z]:
Biểu thức chính thức: c[a-z]t
Cat cbt czt c2t
Kết quả so sánh:catcbtcztc2t
Phân tích:[a-z]t là bất kỳ ký tự nào trong các chữ cái "a" - "z" bắt đầu bằng "c" và kết thúc bằng "t".Các đoạn tương tự có thể được đọc ở đây:
[0-9] và[0123456789] có chức năng tương tự.
[A-F] phù hợp với chữ A đến F bằng chữ cái lớn.
[A-Z] phù hợp với tất cả các ký tự chữ cái từ A đến Z.
[a-z] phù hợp với tất cả các ký tự từ a đến z.
[A-z] phù hợp với tất cả các ký tự từ ASCII A đến ASCII z, không chỉ phù hợp với tất cả các ký tự mà còn phù hợp với các ký tự trong bảng ASCII từ A đến z, chẳng hạn như[Và ^ vv) <unk>
[A-Za-z0-9] Đúng với tất cả các chữ cái và chữ số nhỏ.
-
Khớp với không phải bộ ký tự
Bộ ký tự thường được sử dụng để chỉ định một nhóm các ký tự cần được kết hợp. Nhưng đôi khi, bạn muốn loại trừ một nhóm các ký tự mà bạn không muốn kết hợp. Điều này có thể được thực hiện bằng cách phủ nhận bộ ký tự. Ví dụ:
Biểu thức chính thức: c[^a-z]t
Cat cbt czt c2t cAt
Kết quả so sánh: cat cbt cztc2tcAt
Phân tích: Điều này hoàn toàn trái ngược với ví dụ trước đây.[a-z] phù hợp với tất cả các chữ cái chữ cái, trong khi [^a-z] Khớp với tất cả các ký tự không phải là chữ cái nhỏ.Lưu ý, ký tự ^ là loại bỏ tất cả các ký tự trong tập ký tự.
-
Chữ nguyên tố
Các ký tự số có ý nghĩa đặc biệt trong các biểu thức chính quy, chúng ta đã nói về một số ký tự số, ví dụ như.[Các ký tự này không thể trực tiếp thể hiện ý nghĩa của chúng, ví dụ, không thể trực tiếp sử dụng[Để phù hợp".["Sử dụng. để phù hợp".
Tất cả các ký tự siêu có thể được chuyển đổi trước với một đường cong ngược, và khi chuyển đổi, ký tự sẽ phù hợp với chính nó chứ không phải là ý nghĩa đặc biệt của nó. Ví dụ:[Đúng.[ ":
Biểu thức chính thức: a[b
Đang chờ kết hợp: a[b ab a[[b
Kết quả so sánh:a[bab a[[b
Lưu ý: \ được sử dụng để chuyển nghĩa ký tự đầu chữ cái, điều này cũng có nghĩa là \ cũng là một ký tự đầu chữ cái. Vì vậy, nếu cần phải phù hợp với "" thực sự, có thể sử dụng\:Biểu thức chính thức: a\b
Đang chờ kết hợp: a\b a\b a[[b
Kết quả so sánh: a\ba\ba[[b
-
Chữ trống
Đôi khi bạn có thể cần phải so sánh các ký tự trống không thể in được trong văn bản. Ví dụ, bạn muốn tìm tất cả các ký tự Tab, hoặc tất cả các ký tự thay đổi dòng. Bạn có thể sử dụng các ký tự siêu đặc biệt trong bảng sau:
Ví dụ: \r\n sẽ phù hợp với một bộ chuyển đổi quay trở lại, thể hiện một chuyển đổi tệp trong Windows. Trong các hệ thống Linux và Unix, chỉ cần sử dụng \n.
-
Khớp với một loại ký tự cụ thể
Có một số ký tự siêu đặc biệt có thể được sử dụng để phù hợp với các tập hợp ký tự thông thường. Các ký tự siêu này được gọi là lớp ký tự phù hợp. Bạn sẽ thấy chúng rất thuận tiện khi sử dụng.
Khớp số hoặc không số
Tôi đã nói ở trên.[0-9] có thể kết hợp tất cả các số. Nếu không muốn kết hợp bất kỳ số nào, bạn có thể sử dụng[^0-9]。 Bảng dưới đây liệt kê các ký tự số và phi số:Biểu thức chính thức: c\dt
Chờ kết hợp văn bản: cat c2t czt c9t
Kết quả so sánh: catc2tcztc9tBiểu thức chính thức: c\Dt
Chờ kết hợp văn bản: cat c2t czt c9t
Kết quả so sánh:catc2tcztc9t
Khớp các ký tự chữ cái và không chữ cái
Một ký tự phụ khác thường được sử dụng là \w và \W:Biểu thức chính thức: c\wt
Chờ kết hợp văn bản: cat c2t czt c-t c\t
Kết quả so sánh:catc2tc-t c\tBiểu thức chính thức: c\Wt
Đợi kết hợp văn bản: cat c2t c-t c\t
Kết quả so sánh: cat c2tc-tc\t
Khớp với trống và không trống
Và cuối cùng, bạn sẽ thấy một lớp tương ứng trống: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\tBiể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 tc2tc\t
-
Khớp với một hoặc nhiều ký tự
- ký tự đầu biểu thị một hoặc nhiều ký tự. Ví dụ, a sẽ phù hợp với "a", trong khi a + sẽ phù hợp với một hoặc nhiều "a".
Biểu thức chính thức: cat
Bài viết tương ứng: ct cat caat caaat
Kết quả so sánh:catcaat caaatBiểu thức chính thức: ca + t
Bài viết tương ứng: ct cat caat caaat
Kết quả so sánh:catcaatcaaat
Khi sử dụng + trên bộ ký tự, cần đặt ký hiệu + bên ngoài bộ: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:c0tcatc123t
Phân tích:[0-9] + t là một chuỗi bắt đầu bằng "c", kết thúc bằng "t" và có một hoặc nhiều số ở giữa.Tất nhiên.[0-9+] cũng là một biểu thức chính xác hợp pháp, nhưng nó biểu thị một tập hợp ký tự bao gồm các ký hiệu " 0 " - " 9 " và " + " .
Thông thường, các ký tự số như . và + được sử dụng như là một nghĩa nghĩa khi sử dụng tập hợp ký tự, do đó không cần phải chuyển đổi.[0-9+] và[0-9+Chức năng của nó cũng giống như vậy.
Lưu ý: + là một ký tự đơn vị, cần sử dụng chuyển nghĩa để phù hợp với "+"+。
-
Khớp với 0 hoặc nhiều ký tự
Bạn có thể sử dụng nó nếu bạn muốn kết hợp 0 hoặc nhiều hơn.*Các ký tự chính.
Biểu thức chính thức: cat
Đang chờ kết hợp văn bản: ct cat caat cbt
Kết quả so sánh:ctcatcaatcbt
Để ý:Biểu tượng là ký tự chữ cái. Để có thể phù hợp với "", cần phải chuyển nghĩa。
-
Khớp với 0 hoặc 1 ký tự
? Đáp ứng với 0 hoặc 1 ký tự. Vì vậy, ? rất thích hợp để phù hợp với một ký tự có thể 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:ctcatcaat cbt
Lưu ý: ký hiệu ? là ký tự chữ cái. Để có thể phù hợp với " ? ", cần phải chuyển nghĩa?。
-
Sử dụng số lần kết hợp
Biểu thức chính thức cho phép chỉ định số lần phù hợp. Số lần có thể được chỉ định giữa <unk> { <unk> và <unk> } <unk> .
Lưu ý: { và } cũng là ký tự đầu, cần dịch khi sử dụng nghĩa đen.Khớp số chính xác
Để chỉ định số lần so sánh, bạn có thể nhập số giữa { và }. Ví dụ, {3} sẽ so sánh với 3 ký tự hoặc tập hợp 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:caaatcbt
Ít nhất số lần phù hợp
Chúng ta cũng có thể chỉ định các giá trị tối thiểu cho các trận đấu. Ví dụ, {2,} có nghĩa là trận đấu 2 lần hoặc nhiều lần hơn:Biểu thức chính thức: ca{1,}t
Đang chờ kết hợp văn bản: ct cat caaat cbt
Kết quả so sánh:catcaaatcbt
Khớp giữa các chiều
Chúng ta cũng có thể sử dụng các giá trị tối thiểu và tối đa để xác định số lần phù hợp. Ví dụ, {2,3} có nghĩa là ít nhất 2 lần và tối đa 3 lần.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:caaatcbt
Vậy là? và {0,1} có cùng chức năng với + và {1,} cũng có cùng chức năng với
-
Không tham lam phù hợp
Hãy xem ví dụ sau:
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ải là song song mà là tất cả các văn bản giữa s đầu và g cuối.Đó là vì*+ và + đều là một sự phù hợp thèm ăn. nghĩa là, biểu thức chính thức luôn tìm kiếm một sự phù hợp lớn nhất, chứ không phải là một sự phù hợp nhỏ nhất, nó được thiết kế một cách có chủ ý.
Nhưng nếu bạn không muốn tham lam, bạn nên sử dụng các từ số không tham lam của các từ số này (khớp càng ít ký tự càng tốt). Không tham lam được thêm vào sau từ số:
*Đúng không?Một phiên bản không tham lam, vì vậy bạn có thể sử dụng? để sửa đổi ví dụ trên:
Biểu thức chính thức: s.?g
Lời bài hát: xiao song
Kết quả so sánh:songxiaosong
Phân tích: Có thể thấy s.?g đã kết hợp được 2 bài hát.
-
Xác định ranh giới chuỗi
Các ký tự phụ phù hợp với ranh giới của chuỗi là ^ và $, được sử dụng cho đầu và cuối chuỗi.
^ Sử dụng:
Biểu thức chính thức: ^xiao
Bài viết này được đăng trên blog của Xiao Song.
Kết quả so sánh:xiaosongBài viết này được đăng tải trên trang web của AXIAOSONG.
Kết quả so sánh:
Phân tích: ^xiao phù hợp với chuỗi bắt đầu bằng "xiao".$ được sử dụng như sau:
Biểu hiện chính thức: song$
Bài viết này được đăng trên blog của Xiao Song.
Kết quả so sánh:songBài viết này được viết bởi Xiaosonga.
Kết quả so sánh:xiaosonga
Phân tích: song$ tương ứng với chuỗi kết thúc bằng "song".Tương tá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ả sau khi so sánh: + a1b23 = 4ABC
Phân tích: ^[0-9a-zA-Z]{4,}$ là một chuỗi gồm các số hoặc ký tự và có số lượng lớn hơn hoặc bằng bốn chữ số.
Lưu ý: ^ nếu nằm ở đầu của tập hợp, nó sẽ là âm; nếu nằm bên ngoài tập hợp, nó sẽ phù hợp với vị trí bắt đầu của chuỗi.[^0-9] và ^[Sự khác biệt của 0-9]
- a1b23 = 4ABC
-
Sử dụng chế độ đa dòng
Tuy nhiên, có thể bật chế độ đa dòng. Trong chế độ đa dòng, các công cụ biểu hiện chính quy sẽ sử dụng dấu thay đổi dòng làm dấu phân chia của chuỗi, ^ sẽ phù hợp với đầu văn bản hoặc đầu dòng, trong khi $ có thể phù hợp với kết thúc văn bản hoặc cuối dòng.
Thay đổi ví dụ trên:
Biểu thức chính xác là:[0-9a-zA-Z]{4,}$
Đang chờ kết hợp: a1b234ABC
+a1b23=4ABC
ABC123456Kết quả so sánh:
a1b234ABC
+a1b23=4ABC
ABC123456
Phân tích: ((?m) ^[0-9a-zA-Z]{4,}$ sẽ so sánh mỗi dòng với một chuỗi gồm các chữ số hoặc chữ cái, và các số lượng lớn hơn bằng bốn chữ số.Lưu ý: Nếu sử dụng mô hình đa dòng, thì dấu () phải được đặt ở đầu biểu thức chính quy.
(?m) không được hỗ trợ trong hầu hết các triển khai biểu thức chính quy. Một số triển khai biểu thức chính quy cũng hỗ trợ sử dụng \A bắt đầu của chuỗi khớp, \Z kết thúc của chuỗi khớp. Nếu được hỗ trợ, thì chức năng của các ký tự số này giống như ^, $. Tuy nhiên, các ký tự số này không thể sử dụng sửa đổi ((?m) và do đó không thể được sử dụng cho mô hình đa dòng.
Bài này nói về cơ sở, sau đó bạn có thể xem bài tiếp theo để học các biểu thức chính xác một cách có hệ thống ((ii): bài tiến bộ <unk>。
Bài viết được đăng trên trang web của iOS_小松哥
- 1






