Giới thiệu về Regular Expressions

Là người quản trị hệ thống, phát triển, kỹ sư QA, kỹ sư hỗ trợ, vv người ta cần phải tìm ra một mô hình cụ thể, giống như một tập hợp các địa chỉ IP thuộc phạm vi nhất định hoặc một loạt các thời gian tem hoặc nhóm miền hoặc tên miền phụ tên, từ các tập tin. Một cũng có thể cần phải tìm một từ đánh vần một cách cụ thể hoặc tìm lỗi chính tả có thể có trong một tập tin. Đây là nơi thường xuyên biểu đi vào.

Biểu thức thông thường là các mẫu để phù hợp với mô hình (hoặc đôi khi không phù hợp với mô hình). Họ cung cấp một cách để mô tả và phân tích văn bản. Hướng dẫn này sẽ đưa ra một cái nhìn sâu sắc để biểu thức thông thường mà không đi vào đặc thù của ngôn ngữ nào. Chúng tôi chỉ đơn giản là sẽ sử dụng egrep để giải thích các khái niệm.
Regular Expressions

Biểu thức thông thường bao gồm hai loại nhân vật:

các ký tự chữ thường và

các metacharacters

Những metacharacters là những người mà cung cấp cho sức mạnh để các biểu thức thông thường.

Hãy xem xét các tập tin country.txt sau đó cột đầu tiên là tên quốc gia, các cột thứ hai là dân số của đất nước, và cột thứ ba là châu lục.

$ Cat country.txt
Ấn Độ, 1014003817, Châu Á
Ý, 57634327, Châu Âu
Yemen, 1184300, Châu Á
Argentina, 36955182, Mỹ Latin
Brazil, 172860370, Mỹ Latin
Cameroon, 15421937, Châu Phi
Nhật Bản, 126549976, Châu Á

Neo metacharacters

Nhóm đầu tiên của “metacharater” chúng ta sẽ thảo luận là ^ và $. ^ Và $ phù hợp khi bắt đầu và kết thúc của một mô hình tương ứng và được gọi là metacharacters neo.

Để tìm ra tên của tất cả các quốc gia có tên quốc gia bắt đầu với tôi, chúng tôi sử dụng các biểu thức:

$ Egrep ‘^ I’ country.txt
Ấn Độ, 1014003817, Châu Á
Ý, 57634327, Châu Âu

hoặc để tìm hiểu tất cả những quốc gia có tên lục kết thúc bằng chữ e, chúng tôi làm:

$ Egrep ‘e $’ country.txt
Ý, 57634327, Châu Âu

Các metacharater tiếp theo là dấu chấm (.), Mà phù hợp với bất kỳ một ký tự. Để phù hợp với tất cả các dòng trong đó tên nước là chính xác dài 5 ký tự:

$ Egrep ‘^ …..,’ country.txt
Ấn Độ, 1014003817, Châu Á
Ý, 57634327, Châu Âu
Yemen, 1184300, Châu Á
Nhật Bản, 126549976, Châu Á

Làm thế nào về việc tìm kiếm tất cả các dòng trong đó tên quốc gia bắt đầu bằng hoặc là tôi hoặc J và tên quốc gia dài 5 ký tự?

$ Egrep ‘^ [IJ] ….,’ country.txt
Ấn Độ, 1014003817, Châu Á
Ý, 57634327, Châu Âu
Nhật Bản, 126549976, Châu Á

[…] Được gọi là một nhân vật hay một lớp nhân vật. Bên trong một bộ ký tự chỉ có một trong những nhân vật đã cho là phù hợp.

Một ^ bên trong bộ ký tự phủ định bộ ký tự. Ví dụ sau đây sẽ phù hợp với tên quốc gia từ lâu năm nhân vật nhưng mà không bắt đầu với hoặc là tôi hoặc J.

$ Egrep ‘^ [^ IJ] ….,’ country.txt
Yemen, 1184300, Châu Á

Phân nhóm metacharater và thay đổi luân phiên

Để phù hợp với tất cả các dòng có chứa Á hoặc Châu Phi:

$ Egrep | country.txt ‘Á Châu Phi’
Ấn Độ, 1014003817, Châu Á
Yemen, 1184300, Châu Á
Cameroon, 15421937, Châu Phi
Nhật Bản, 126549976, Châu Á

Điều này cũng có thể được thực hiện bằng cách lấy A và một phổ biến.

$ Egrep ‘A (si | fric) một’ country.txt
Ấn Độ, 1014003817, Châu Á
Yemen, 1184300, Châu Á
Cameroon, 15421937, Châu Phi
Nhật Bản, 126549976, Châu Á

Định lượng

Thay vì viết

$ Egrep ‘^ [IJ] ….,’ country.txt

chúng ta có thể viết

$ Egrep ‘^ [IJ]. {4},’ country.txt

nơi {} được gọi là định lượng. Họ xác định có bao nhiêu lần các nhân vật trước khi chúng xảy ra.

Chúng tôi có thể cung cấp một phạm vi quá:

$ Egrep ‘^ [IJ] {4,6},.’ Country.txt
Ấn Độ, 1014003817, Châu Á
Ý, 57634327, Châu Âu
Nhật Bản, 126549976, Châu Á

Điều này sẽ phù hợp với các quốc gia tên bắt đầu với I hoặc J và có 4-6 nhân vật sau khi nó.

Có một số phím tắt có sẵn cho các định lượng. Ví dụ như,

{0,1} là tương đương?

$ Egrep ‘^ ab {0,1} $ c’ filename

cũng giống như

$ Egrep ‘^ ab c?’ Filename

{0,} là tương đương với *

$ Egrep ‘^ ab {0,} c $’ filename

cũng giống như

$ Egrep ‘^ ab * c’ filename

{1,} là tương đương với +

$ Egrep ‘^ ab {1,} c $’ filename

cũng giống như

$ Egrep ‘^ ab + c’ filename

Chúng ta hãy xem một số ví dụ liên quan đến các biểu thức chúng ta đã thấy cho đến nay. Ở đây thay vì tìm kiếm một tập tin, chúng tôi tìm kiếm từ đầu vào tiêu chuẩn. Bí quyết chúng tôi sử dụng là chúng ta biết grep (hoặc egrep) tìm kiếm một mô hình, và nếu một mô hình được tìm thấy, sau đó toàn bộ dòng có chứa các mẫu được hiển thị.

Chúng tôi muốn tìm hiểu tất cả những cách có thể đánh vần câu phù hợp với màu xám là yêu thích của mình.

Các biểu thức như sau:

$ Egrep ‘r suit gr [ea] y colou? Là mình favou? Nghi thức’
bộ đồ màu xám là yêu thích của mình
bộ đồ màu xám là yêu thích của mình

bộ đồ màu xám là yêu thích của mình
bộ đồ màu xám là yêu thích của mình

Nhìn vào biểu thức trên, chúng ta có thể thấy rằng:

màu xám có thể được viết như màu xám hoặc xám

màu sắc có thể được viết như màu hoặc màu sắc, đó có nghĩa là u là tùy chọn để chúng tôi sử dụng u?

tương tự như yêu thích hoặc yêu thích có thể được viết favou? nghi thức

Làm thế nào về kết hợp một mã zip Mỹ?

$ Egrep ‘^ [0-9] {5} (- [0-9] {4})? $’
83.456
83.456

83456-

834.562

92456-1234
92456-1234

10344-2342-345

Một ví dụ nữa của phù hợp với tất cả các lần có giá trị trong một đồng hồ 24 giờ.

$ Egrep ‘^ ([01] [0-9] | 2 [0-3]): [0-5] [0-9]: [0-5] [0-9]’
23:44:02
23:44:02

33:45:11

15:45:33
15:45:33

Trong ví dụ trên, chúng tôi cho rằng, nếu các chữ số đầu tiên của giờ là 0 hoặc 1, sau đó điều thứ hai sẽ
được bất kỳ từ 0 đến 9. Tuy nhiên, nếu các chữ số đầu tiên là 2, sau đó các giá trị được phép cho chữ số thứ hai là 0,1, 2 hoặc 3.
Lời Boundary

Để viết một mô hình để phù hợp với các từ kết thúc với màu sắc như vậy mà unicolor, màu nước, màu vv
là phù hợp nhưng không phải không màu hoặc màu sắc. Hãy thử những ví dụ cho mình, để làm quen với họ:

$ Egrep ‘màu \>’

Tiếp theo, để phù hợp với không màu và đầy màu sắc, nhưng không unicolor, màu nước, màu, vv

$ Egrep ‘\ <màu’

Qua đó để phù hợp với màu sắc chính xác từ, chúng tôi làm:

$ Egrep ‘\ <màu \>’

Backreferences

Giả sử chúng ta muốn để phù hợp với tất cả các từ đã được đánh máy gấp đôi, giống như hình hoặc trước khi trước khi, chúng ta phải sử dụng backreferences. Backreferences được sử dụng để ghi nhớ các mẫu.

Dưới đây là một ví dụ:

$ Egrep “\ <the \> \ 1”

Hoặc cách chung chung:

$ Egrep “\ <(. *) \> \ 1”

Ví dụ trên có thể được sử dụng để tìm tất cả các tên trong đó các tên đầu tiên và cuối cùng là như nhau. Trong trường hợp có nhiều hơn một tập hợp các dấu ngoặc đơn, sau đó lần thứ hai, thứ ba vv thứ tư có thể được tham chiếu với \ 2, \ 3 \ 4 vv

Đây chỉ là một giới thiệu về sức mạnh của biểu thức thông thường.