JavaRush /Blog Java /Random-VI /RegEx: 20 bước ngắn để thành thạo các biểu thức chính quy...
Artur
Mức độ
Tallinn

RegEx: 20 bước ngắn để thành thạo các biểu thức chính quy. Phần 1

Xuất bản trong nhóm
Bản gốc của bài viết này là ở đây . Có lẽ không có quá nhiều lý thuyết và tôi sẽ cung cấp một số liên kết đến tài liệu chi tiết hơn về biểu thức chính quy ở cuối bài viết. Nhưng đối với tôi, có vẻ như việc bắt đầu đi sâu vào một chủ đề như biểu thức chính quy sẽ thú vị hơn nhiều nếu có cơ hội không chỉ nhồi nhét mà còn ngay lập tức củng cố kiến ​​thức bằng cách hoàn thành các nhiệm vụ nhỏ trong quá trình thực hiện. RegEx: 20 bước ngắn để thành thạo các biểu thức chính quy.  Phần 1 - 1Bắt đầu nào. Thông thường, những người phản đối việc sử dụng biểu thức chính quy ('RegEx' hoặc đơn giản là 'regex') trong lập trình đã trích dẫn câu trích dẫn sau đây của Jamie Zawinski: "Một số người, khi gặp phải một vấn đề, hãy nghĩ, 'Tôi biết, tôi sẽ sử dụng biểu thức chính quy .'" Bây giờ họ có hai vấn đề". Trên thực tế, việc sử dụng biểu thức chính quy chưa phải là một ý tưởng tốt hay xấu. Và bản thân điều này sẽ không gây thêm vấn đề gì và sẽ không giải quyết được bất kỳ vấn đề nào trong số đó. Nó chỉ là một công cụ. Và cách bạn sử dụng nó (đúng hay sai) sẽ quyết định kết quả bạn sẽ thấy. Ví dụ: nếu bạn cố gắng sử dụng biểu thức chính quy để tạo trình phân tích cú pháp HTML, thì rất có thể bạn sẽ gặp khó khăn . Nhưng nếu bạn chỉ muốn trích xuất, chẳng hạn như dấu thời gian từ một số chuỗi, thì có thể bạn sẽ ổn. Để giúp bạn nắm vững các biểu thức chính quy dễ dàng hơn, tôi đã tổng hợp bài học này để giúp bạn nắm vững các biểu thức chính quy ngay từ đầu chỉ trong 20 bước ngắn gọn. Hướng dẫn này chủ yếu tập trung vào các khái niệm cơ bản về biểu thức chính quy và chỉ đi sâu vào các chủ đề nâng cao hơn khi cần thiết.

Bước 1: Tại sao nên sử dụng biểu thức chính quy

RegEx: 20 bước ngắn để thành thạo các biểu thức chính quy.  Phần 1 - 2Biểu thức chính quy được sử dụng để tìm kiếm kết quả phù hợp trong văn bản bằng cách sử dụng các mẫu (mẫu) được chỉ định. Bằng cách sử dụng biểu thức chính quy, chúng ta có thể trích xuất các từ từ văn bản một cách dễ dàng và đơn giản, cũng như các ký tự chữ và ký tự meta riêng lẻ cũng như chuỗi của chúng đáp ứng các tiêu chí nhất định. Đây là những gì Wikipedia cho chúng ta biết về chúng : Biểu thức chính quy là ngôn ngữ chính thức để tìm kiếm và thao tác các chuỗi con trong văn bản, dựa trên việc sử dụng siêu ký tự (ký tự đại diện). Để tìm kiếm, một chuỗi mẫu (mẫu tiếng Anh, trong tiếng Nga thường được gọi là “mẫu”, “mặt nạ”) được sử dụng, bao gồm các ký hiệu và siêu ký hiệu cũng như xác định quy tắc tìm kiếm. Để thao tác với văn bản, một chuỗi thay thế được chỉ định bổ sung, chuỗi này cũng có thể chứa các ký tự đặc biệt. Mẫu có thể đơn giản như từ dogtrong câu này:
The quick brown fox jumps over the lazy dog.
Biểu thức chính quy này trông như thế này:
chó
...Dễ dàng phải không? Mẫu cũng có thể là bất kỳ từ nào có chứa chữ cái o. Biểu thức chính quy để tìm mẫu như vậy có thể trông như thế này:
\ Ồ * _
( Bạn có thể thử biểu thức chính quy này tại đây .) Bạn sẽ nhận thấy rằng khi các yêu cầu "khớp" trở nên phức tạp hơn thì biểu thức chính quy cũng trở nên phức tạp hơn. Có các dạng ký hiệu bổ sung để chỉ định các nhóm ký tự và các mẫu lặp lại phù hợp mà tôi sẽ giải thích bên dưới. Tuy nhiên, ngay khi chúng ta tìm thấy sự trùng khớp với một mẫu trong một số văn bản, thì chúng ta có thể làm gì với nó? Công cụ biểu thức chính quy hiện đại cho phép bạn trích xuất các ký tự hoặc chuỗi ký tự (chuỗi con) từ văn bản có sẵn hoặc xóa chúng hoặc thay thế chúng bằng văn bản khác. Nói chung, các biểu thức chính quy được sử dụng để phân tích và thao tác văn bản. Ví dụ: chúng tôi có thể trích xuất các chuỗi con trông giống như địa chỉ IP và sau đó cố gắng xác minh chúng. Hoặc chúng ta có thể trích xuất tên và địa chỉ email và lưu trữ chúng trong cơ sở dữ liệu. Hoặc sử dụng cụm từ thông dụng để tìm thông tin nhạy cảm (chẳng hạn như số hộ chiếu hoặc số điện thoại) trong email và cảnh báo người dùng rằng họ có thể đang gặp nguy hiểm. Regex thực sự là một công cụ linh hoạt, dễ học nhưng khó thành thạo: “Giống như có sự khác biệt giữa việc chơi hay một bản nhạc và tạo ra âm nhạc, cũng có sự khác biệt giữa việc biết các biểu thức thông thường và hiểu chúng”. - Jeffrey E. F. Friedl, Nắm vững các biểu thức chính quy

Bước 2: Dấu ngoặc vuông[]

Các biểu thức chính quy đơn giản nhất, dễ hiểu là những biểu thức chỉ đơn giản tìm kiếm sự khớp từng ký tự giữa mẫu biểu thức chính quy và chuỗi đích. Ví dụ: hãy thử tìm một con mèo: RegEx: 20 bước ngắn để thành thạo các biểu thức chính quy.  Phần 1 - 3
mô hình: con mèo
string: Con mèo bị chém khi chạy dưới gầm ô tô.
trận đấu:      ^^^
( Thực tế hoạt động như thế nào - xem tại đây ) NB! Tất cả các giải pháp được trình bày ở đây chỉ là giải pháp khả thi. Trong các biểu thức chính quy, cũng như trong lập trình nói chung, bạn có thể giải quyết cùng một vấn đề theo nhiều cách khác nhau. Tuy nhiên, ngoài việc so sánh chặt chẽ từng ký tự, chúng tôi cũng có thể chỉ định các kết quả khớp thay thế bằng dấu ngoặc vuông:
mẫu: ca[rt]
string: Con mèo bị chém khi chạy dưới gầm ô tô.
trận đấu:      ^^^ ^^^
( Cách thức hoạt động ) Việc mở và đóng dấu ngoặc vuông cho công cụ biểu thức chính quy biết rằng nó phải khớp với bất kỳ ký tự nào được chỉ định, nhưng chỉ một ký tự. Ví dụ: biểu thức chính quy ở trên sẽ không tìm thấy carttoàn bộ từ mà chỉ tìm thấy một phần của từ đó:
mẫu: ca[rt]
string: Con mèo bị chém khi chạy dưới gầm xe.
trận đấu:      ^^^ ^^^
( Cách hoạt động ) Khi bạn sử dụng dấu ngoặc vuông, bạn yêu cầu công cụ biểu thức chính quy chỉ khớp với một trong các ký tự có trong dấu ngoặc. Công cụ tìm thấy ký tự c, sau đó là ký tự a, nhưng nếu ký tự tiếp theo không phải là rhoặc t, thì đây không phải là một kết quả khớp hoàn chỉnh. Nếu nó tìm thấy ca, và sau đó r, hoặc t, nó sẽ dừng lại. Nó sẽ không cố gắng khớp nhiều ký tự hơn vì dấu ngoặc vuông cho biết rằng chỉ cần khớp một trong các ký tự được chứa. Khi tìm thấy ca, nó sẽ tìm rtrong từ tiếp theo cartvà dừng lại vì nó đã tìm thấy kết quả khớp với chuỗi car.

Mục tiêu đào tạo:

Viết một biểu thức chính quy khớp với tất cả 10 mẫu hadtrong Hadđoạn trích về cách chơi chữ không thể dịch được bằng phương ngữ địa phương này:
mẫu:
chuỗi: Jim, nơi Bill đã "có" , đã "đã có" . "Đã từng" đã đúng.
trận đấu:                  ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^
( Xem giải pháp khả thi ở đây ) Còn tất cả tên các loài động vật trong câu sau thì sao?
mẫu:
chuỗi: Một con dơi, một con mèo  một con chuột bước vào quán bar...
trận đấu:    ^^^ ^^^ ^^^
( Giải pháp khả thi ) Hoặc thậm chí đơn giản hơn: tìm các từ barhoặc bat:
mẫu:
chuỗi: Một con dơi, một con mèo  một con chuột bước vào quán bar...
trận đấu:    ^^^ ^^^
( Giải pháp khả thi ) Bây giờ chúng ta đã học cách viết các biểu thức chính quy phức tạp ít nhiều và chúng ta chỉ đang ở bước 2! Tiếp tục đi!

Bước 3: Trình tự thoát

RegEx: 20 bước ngắn để thành thạo các biểu thức chính quy.  Phần 1 - 4Ở bước trước, chúng ta đã tìm hiểu về dấu ngoặc vuông []và cách chúng giúp chúng ta tìm các kết quả phù hợp thay thế bằng công cụ biểu thức chính quy. Nhưng nếu chúng ta muốn tìm các kết quả khớp ở dạng dấu ngoặc vuông mở và đóng thì sao []? Khi chúng tôi muốn tìm kết quả khớp từng ký tự của từ cat, chúng tôi đã cung cấp cho công cụ biểu thức chính quy chuỗi ký tự này ( cat). Hãy thử tìm dấu ngoặc vuông []theo cách tương tự:
mẫu: chuỗi [] 
: Bạn không thể khớp [] bằng biểu thức chính quy! Bạn sẽ phải hối hận vì điều này!
diêm: 
( Hãy xem điều gì đã xảy ra ) Tuy nhiên, có điều gì đó không hoạt động... Điều này là do các ký tự trong ngoặc vuông hoạt động như các ký tự công cụ biểu thức chính quy đặc biệt thường được sử dụng để biểu thị điều gì đó khác và không phải là một mẫu chữ để khớp với chúng. Như chúng ta nhớ ở bước 2, chúng được sử dụng để tìm các kết quả khớp thay thế để công cụ biểu thức chính quy có thể khớp với bất kỳ ký tự nào có giữa chúng. Nếu bạn không đặt bất kỳ ký tự nào giữa chúng, nó có thể gây ra lỗi. Để khớp các ký tự đặc biệt này, chúng ta phải thoát chúng bằng cách đặt trước chúng một ký tự dấu gạch chéo ngược \. Dấu gạch chéo ngược (hoặc dấu gạch chéo ngược) là một ký tự đặc biệt khác yêu cầu công cụ biểu thức chính quy tìm kiếm ký tự tiếp theo theo nghĩa đen, thay vì sử dụng nó làm siêu ký tự. Công cụ biểu thức chính quy sẽ chỉ tìm kiếm các ký tự []theo nghĩa đen nếu cả hai đều đứng trước dấu gạch chéo ngược:
mẫu: \[\]
chuỗi: Bạn không thể khớp [] bằng biểu thức chính quy! Bạn sẽ phải hối hận vì điều này!
trận đấu:                  ^^ 
( Hãy xem điều gì đã xảy ra lần này ) OK, nếu chúng ta muốn tìm chính dấu gạch chéo ngược thì sao? Đáp án đơn giản. Vì dấu gạch chéo ngược \cũng là một ký tự đặc biệt nên nó cũng cần phải được thoát. Làm sao? Dấu gạch chéo ngược!
mẫu: \\
chuỗi: C:\Users\Tanja\Pictures\Dogs
trận đấu:    ^ ^ ^ ^
( Ví dụ tương tự trong thực tế ) Chỉ các ký tự đặc biệt phải được đặt trước dấu gạch chéo ngược. Tất cả các ký tự khác được hiểu theo nghĩa đen theo mặc định. Ví dụ: biểu thức chính quy tchỉ khớp với tcác chữ cái viết thường:
mẫu: t
chuỗi: ttt
trận đấu: ^ ^ ^ ^
( Ví dụ ) Tuy nhiên, trình tự này \thoạt động khác nhau. Đây là mẫu để tìm kiếm ký tự tab:
mẫu: \t
chuỗi: ttt
trận đấu:   ^ ^ ^
( Ví dụ ) Một số chuỗi thoát phổ biến bao gồm \n(ngắt dòng kiểu UNIX) và \r(được sử dụng trong ngắt dòng kiểu Windows \r\n). \rlà ký tự "trả về dòng" và \nlà ký tự "nguồn cấp dòng", cả hai đều được xác định cùng với tiêu chuẩn ASCII khi máy đánh chữ vẫn còn được sử dụng rộng rãi. Các trình tự thoát phổ biến khác sẽ được trình bày sau trong hướng dẫn này.

Trong lúc chờ đợi, hãy củng cố tài liệu bằng một vài câu đố đơn giản:

Hãy thử viết một biểu thức chính quy để tìm... một biểu thức chính quy ;) Kết quả sẽ giống như thế này:
mẫu:
chuỗi: ...khớp biểu thức chính quy này ` \[\] ` với biểu thức chính quy?
trận đấu:                       ^^^	
( Giải pháp ) Bạn đã quản lý được chưa? Làm tốt! Bây giờ hãy thử tạo một biểu thức chính quy để tìm kiếm các chuỗi thoát như thế này:
mẫu:
chuỗi: ` \r `, ` \t `, và ` \n ` đều là các chuỗi thoát biểu thức chính quy.
trận đấu:   ^^ ^^ ^^
( Giải pháp )

Bước 4: tìm ký tự "bất kỳ" bằng dấu chấm.

RegEx: 20 bước ngắn để thành thạo các biểu thức chính quy.  Phần 1 - 5Khi viết các giải pháp khớp chuỗi thoát mà chúng ta đã thấy ở bước trước, bạn có thể tự hỏi: "Tôi có thể khớp ký tự dấu gạch chéo ngược và sau đó là bất kỳ ký tự nào khác theo sau nó không?"... Tất nhiên là bạn có thể! Có một ký tự đặc biệt khác được sử dụng để khớp (gần như) bất kỳ ký tự nào - ký tự dấu chấm (dấu chấm). Đây là những gì nó làm:
mẫu: .
chuỗi: Tôi xin lỗi, Dave. Tôi sợ tôi không thể làm điều đó.
trận đấu: ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^	
( Ví dụ ) Nếu bạn chỉ muốn khớp các mẫu trông giống như chuỗi thoát, bạn có thể làm một cái gì đó như thế này:
mẫu: \\. 
chuỗi: Xin chào Walmart là cháu trai tôi, tên nó là " \n \r \t ".
trận đấu:                                              ^^ ^^ ^^	
( Ví dụ ) Và, như với tất cả các ký tự đặc biệt, nếu bạn muốn khớp một chữ ., thì bạn cần phải đặt trước nó một ký tự \:
mẫu: \. 
chuỗi: Chiến tranh là hòa bình . Tự do là chế độ nô lệ . Sự thiếu hiểu biết là sức mạnh . 
trận đấu:             ^ ^ ^
( Ví dụ )

Bước 5: Phạm vi ký tự

RegEx: 20 bước ngắn để thành thạo các biểu thức chính quy.  Phần 1 - 6Điều gì sẽ xảy ra nếu bạn không cần bất kỳ ký hiệu nào mà chỉ muốn tìm các chữ cái trong văn bản? Hay những con số? Hoặc nguyên âm? Tìm kiếm theo các lớp ký tự và phạm vi của chúng sẽ cho phép chúng ta đạt được điều này.
` \n `, ` \r ` và ` \t `  các ký tự khoảng trắng, ` \. `, ` \\ ` và ` \[ ` không phải là .	
Các ký tự là "khoảng trắng" nếu chúng không tạo ra dấu hiệu hiển thị trong văn bản. Dấu cách " " là dấu cách, ngắt dòng hoặc tab. Giả sử chúng ta muốn tìm các chuỗi thoát chỉ đại diện cho các ký tự khoảng trắng \nvà trong đoạn văn trên chứ không phải các chuỗi thoát khác \r. \tLàm thế nào chúng ta có thể làm điều này?
mẫu: \\[nrt] 
chuỗi: ` \n `, ` \r `, và ` \t `  các ký tự khoảng trắng, ` \. `, ` \\ ` và ` \[ ` không phải là .
trận đấu:   ^^ ^^ ^^	
( Ví dụ ) Cách này hiệu quả nhưng không phải là một giải pháp hay. Điều gì sẽ xảy ra nếu sau này chúng ta cần khớp chuỗi thoát cho ký tự "nguồn cấp dữ liệu biểu mẫu" \f? (Ký hiệu này được sử dụng để biểu thị ngắt trang trong văn bản.)
mẫu: \\[nrt] 
chuỗi: ` \n `, ` \r `, ` \t `, và ` \f `  các ký tự khoảng trắng, ` \. `, ` \\ ` và ` \[ ` không phải là .
trận đấu:   ^^ ^^ ^^	
( Giải pháp không hiệu quả ) Với cách tiếp cận này, chúng ta cần liệt kê riêng từng chữ cái viết thường mà chúng ta muốn khớp, trong dấu ngoặc vuông. Một cách dễ dàng hơn để thực hiện việc này là sử dụng phạm vi ký tự để khớp với bất kỳ chữ cái viết thường nào:
mẫu: \\[az] 
chuỗi: ` \n `, ` \r `, ` \t `, và ` \f `  các ký tự khoảng trắng, ` \. `, ` \\ ` và ` \[ ` không phải là .
trận đấu:   ^^ ^^ ^^ ^^	
( Và điều này đã hoạt động ) Phạm vi ký tự hoạt động như bạn mong đợi, dựa trên ví dụ trên. Đặt dấu ngoặc vuông xung quanh chữ cái đầu tiên và cuối cùng mà bạn muốn khớp, có dấu gạch nối ở giữa. Ví dụ: nếu bạn chỉ muốn tìm "bộ" dấu gạch chéo ngược \và một chữ cái từ ađến m, bạn có thể làm như sau:
mẫu: \\[am] 
chuỗi: ` \n `, ` \r `, ` \t `, và ` \f `  các ký tự khoảng trắng, ` \. `, ` \\ ` và ` \[ ` không phải là .
trận đấu:                         ^^	
( Ví dụ ) Nếu bạn muốn khớp nhiều phạm vi, chỉ cần đặt chúng nối tiếp nhau giữa các dấu ngoặc vuông:
mẫu: \\[a-gq-z] 
chuỗi: ` \n `, ` \r `, ` \t `, và ` \f `  các ký tự khoảng trắng, ` \. `, ` \\ ` và ` \[ ` không phải là .
trận đấu:         ^^ ^^ ^^	
( Ví dụ ) Các phạm vi ký tự phổ biến khác bao gồm: A-Z0-9

Hãy thử chúng trong thực tế và giải quyết một số vấn đề:

Số thập lục phân có thể chứa chữ số 0-9cũng như chữ cái A-F. Khi được sử dụng để chỉ định màu, mã thập lục phân có thể chứa tối đa ba ký tự. Tạo biểu thức chính quy để tìm mã thập lục phân hợp lệ trong danh sách bên dưới:
mẫu:
chuỗi: 1H8 4E2 8FF 0P1 T8B 776 42B G12
trận đấu:      ^^^ ^^^ ^^^ ^^^	
( Giải pháp ) Sử dụng các phạm vi ký tự, tạo một biểu thức chính quy sẽ chỉ chọn các phụ âm viết thường (không phải nguyên âm, bao gồm y) trong câu bên dưới:
mẫu:
chuỗi : Các bức tường trong đó hoàn toàn cao , hoàn toàn cao . _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
trận đấu:   ^ ^ ^^^ ^ ^^ ^^ ^^ ^ ^ ^ ^^^ ^ ^ ^^^ ^ ^^	
( Giải pháp )

Bước 6: biểu tượng “not”, dấu mũ, dấu mũ, dấu mũ…^

RegEx: 20 bước ngắn để thành thạo các biểu thức chính quy.  Phần 1 - 7Thực sự, có hơn 9000 tên cho biểu tượng này :) Nhưng để đơn giản, có lẽ chúng ta sẽ tập trung vào “không”. Giải pháp của tôi cho vấn đề cuối cùng hơi dài. Phải mất 17 ký tự để nói "lấy toàn bộ bảng chữ cái ngoại trừ nguyên âm". Tất nhiên có một cách dễ dàng hơn để làm điều này. Dấu hiệu "không" ^cho phép chúng ta chỉ định các ký tự và phạm vi ký tự không được khớp với các ký tự được chỉ định trong mẫu. Một giải pháp đơn giản hơn cho vấn đề cuối cùng ở trên là tìm các ký tự không đại diện cho nguyên âm:
mẫu : [ ^ aeiou ] 
string   : Bức tường trong đó hoàn toàn cao , hoàn toàn cao . _ _ _ _ _ _ _ _ _ 
trận đấu: ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ 	
( Ví dụ ) Dấu "không" ^là ký tự ngoài cùng bên trái trong dấu ngoặc []vuông cho công cụ biểu thức chính quy khớp với một (bất kỳ) ký tự nào không nằm trong dấu ngoặc vuông. Điều này có nghĩa là biểu thức chính quy ở trên cũng khớp với tất cả dấu cách, dấu chấm ., dấu phẩy ,và chữ hoa Tở đầu câu. Để loại trừ chúng, chúng ta cũng có thể đặt chúng trong ngoặc vuông:
mẫu : [ ^ aeiou . , T ] string  
: Bức tường trong đó  một phần tương đối , hoàn toàn cao . _ _ _ _ _ _ _ 
trận đấu:   ^ ^ ^^^ ^ ^^ ^^ ^^ ^ ^ ^ ^^^ ^ ^ ^^^ ^ ^^	
( Ví dụ ) ghi chúrằng trong trường hợp này, chúng ta không cần phải thoát khỏi dấu chấm bằng dấu gạch chéo ngược, như chúng ta đã làm trước đây khi tìm kiếm nó mà không sử dụng dấu ngoặc vuông. Nhiều ký tự đặc biệt trong ngoặc vuông được xử lý theo nghĩa đen, bao gồm ký tự mở [- nhưng không phải là ]ký tự đóng - (bạn có đoán được tại sao không?). Ký tự dấu gạch chéo ngược \cũng không được hiểu theo nghĩa đen. Nếu bạn muốn so khớp dấu gạch chéo ngược theo nghĩa đen \bằng dấu ngoặc vuông thì bạn phải thoát dấu gạch chéo này bằng cách đặt trước dấu gạch chéo ngược sau \\. Hành vi này được thiết kế sao cho các ký tự khoảng trắng cũng có thể được đặt trong dấu ngoặc vuông để khớp:
mẫu: [\t]
chuỗi: ttt
trận đấu:   ^ ^ ^
( Ví dụ ) Dấu hiệu "không" ^cũng có thể được sử dụng với các phạm vi. Nếu tôi chỉ muốn chụp các ký tự a, b, c, xy, ztôi có thể làm điều gì đó như thế này:
mẫu: [abcxyz] 
chuỗi:   abc defghijklmnopqrstuvw xyz 
khớp: ^^^ ^^^
( Ví dụ ) ...hoặc, tôi có thể chỉ định rằng tôi muốn tìm bất kỳ ký tự nào không nằm giữa dw:
mẫu: [^dw] 
chuỗi:   abc defghijklmnopqrstuvw xyz 
khớp: ^^^ ^^^
( Ví dụ ) Tuy nhiên,hãy cẩn thậnvới "không" ^. Thật dễ dàng để nghĩ "à, tôi đã chỉ định [^ b-f], vì vậy tôi sẽ nhận được một chữ cái viết thường ahoặc chữ cái nào đó sau f. Không phải vậy. Biểu thức chính quy này sẽ khớp với bất kỳ ký tự nào không nằm trong phạm vi đó, bao gồm các chữ cái, số, dấu câu và dấu cách.
mẫu: [^dw] 
chuỗi:   abc defg h . i , j - klmnopqrstuvw xyz 
khớp: ^^^ ^ ^ ^ ^ ^^^
( Ví dụ )

Nhiệm vụ thăng cấp:

Sử dụng dấu "không" ^trong ngoặc vuông để khớp với tất cả các từ bên dưới không kết thúc bằng y:
mẫu:
chuỗi: day dog ​​hog hay bog bay ray chà 
trận đấu:      ^^^ ^^^ ^^^ ^^^	
( Giải pháp ) Viết biểu thức chính quy sử dụng một phạm vi và dấu "không" ^để tìm tất cả các năm từ 1977 đến 1982 (đã bao gồm):
mẫu:
chuỗi: 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984
trận đấu:            ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^
( Giải pháp ) Viết biểu thức chính quy để tìm tất cả các ký tự không phải là ký tự dấu "không" ^:
mẫu:
chuỗi:   abc1 ^ 23*() 
khớp với: ^^^ ^^^^	
( Giải pháp )

Bước 7: Lớp nhân vật

Các lớp ký tự thậm chí còn đơn giản hơn phạm vi ký tự. Các công cụ biểu thức chính quy khác nhau có sẵn các lớp khác nhau, vì vậy tôi sẽ chỉ đề cập đến những lớp chính ở đây. (Kiểm tra xem bạn đang sử dụng phiên bản nào của biểu thức chính quy, vì có thể có nhiều phiên bản hơn - hoặc chúng có thể khác với phiên bản được hiển thị ở đây.) Các lớp ký tự hoạt động gần giống như các phạm vi, nhưng bạn không thể chỉ định giá trị 'bắt đầu' và 'kết thúc':
Lớp học biểu tượng
\d "con số"[0-9]
\w "ký hiệu từ"[A-Za-z0-9_]
\s "khoảng trống"[ \t\r\n\f]
Lớp ký tự "word" \wđặc biệt hữu ích vì bộ ký tự này thường được yêu cầu cho các mã định danh hợp lệ (tên biến, tên hàm, v.v.) trong nhiều ngôn ngữ lập trình khác nhau. Chúng ta có thể sử dụng \wđể đơn giản hóa biểu thức chính quy mà chúng ta đã thấy trước đó:
mẫu: \\[az] 
chuỗi: ` \n `, ` \r `, ` \t `, và ` \f `  các ký tự khoảng trắng, ` \. `, ` \\ ` và ` \[ ` không phải là .
trận đấu:   ^^ ^^ ^^ ^^	
Sử dụng \wchúng ta có thể viết như thế này:
mẫu: \\\w 
chuỗi: ` \n `, ` \r `, ` \t `, và ` \f `  các ký tự khoảng trắng, ` \. `, ` \\ ` và ` \[ ` không phải là .
trận đấu:   ^^ ^^ ^^ ^^	
( Ví dụ )

2 nhiệm vụ cho may mắn:

Như bạn và tôi đã biết, trong Java, một mã định danh (tên của biến, lớp, hàm, v.v.) chỉ có thể bắt đầu bằng chữ cái a- zA- Z, ký hiệu đô la $hoặc dấu gạch dưới _. ( gạch chân tất nhiên là kiểu xấu, nhưng trình biên dịch bỏ qua nó, ghi chú của người dịch ). Các ký tự còn lại phải là ký tự "word" \w. Sử dụng một hoặc nhiều lớp ký tự, tạo một biểu thức chính quy để tìm kiếm các mã định danh Java hợp lệ trong số các chuỗi ba ký tự sau:
mẫu:
chuỗi:   __e $12 .x2 foo Thanh 3mm
trận đấu: ^^^ ^^^ ^^^ ^^^	
( Giải pháp ) Số An sinh Xã hội Hoa Kỳ (SSN) là các số có 9 chữ số ở định dạng XXX-XX-XXXX, trong đó mỗi X có thể là bất kỳ chữ số nào [0-9]. Sử dụng một hoặc nhiều lớp ký tự, viết biểu thức chính quy để tìm các SSN được định dạng chính xác trong danh sách bên dưới:
mẫu:
chuỗi: 113-25=1902 182-82-0192 H23-_3-9982 1I1-O0-E38B
trận đấu:              ^^ ^^^ ^^ ^^ ^^
( Giải pháp ) RegEx: 20 bước ngắn để thành thạo các biểu thức chính quy. Phần 2. 20 bước ngắn để thành thạo biểu thức chính quy. Phần 3. RegEx: 20 bước ngắn để thành thạo biểu thức chính quy. Phần 4.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION