Hướng dẫn sử dụng biểu thức chính quy Regular Expression (Regex)

ngochoangimsat

Administrator
Mục đích của bài viết hướng dẫn sử dụng Biểu thức chính quy (Regular Expression) là để người đọc kết hợp với bài hướng dẫn sử dụng Tasker đã được iCar Việt Nam biên soạn để tạo ra các tác vụ xử lý thông minh. Các bạn có nhu cầu tìm hiểu về tasker vui lòng đọc thêm tại đây

Biểu thức chính quy (Regular Expression, viết tắt Regex) là gì?

Biểu thức chính quy là một nhóm ký tự hoặc ký hiệu được sử dụng để tìm kiếm một mẫu chỉ định từ một đoạn văn bản.

Biểu thức chính quy là một Mẫu mà nó khớp với một chuỗi từ trái sang phải. "Regular expression" là từ đầy đủ, thường được viết tắt là "regex" hoặc "regexp". Biểu thức chính quy được sử dụng để thay thể một đoạn văn bản trong một chuỗi; để xác thực biểu mẫu; để trích xuất một phần văn bản từ trong một văn bản khác mà nó khớp với biểu thức được đưa ra.

Hãy tưởng tượng bạn đang viết một ứng dụng và bạn muốn thiết lập một quy tắc cho người dụng chọn username của họ. Chúng ta muốn cho họ nhập các chữ cái, các con số, dấu gạch dưới (_) và dấu gạch ngang (-). Chúng ta cũng muốn giới hạn số lượng các ký tự trong username để nó không quá dài hoặc quá ngắn. Chúng ta sẽ sử dụng biểu thức chính quy sau để xác thực:


Biểu thức chính quy bên trên có thể chấp nhận chuỗi john_doe, jo-hn_doe và john12_as. Nó không chấp nhận chuỗi Jo bởi vì chuỗi này chứa ký tự viết hoa và nó quá ngắn (chỉ 2 ký tự trong khi tối thiểu theo yêu cầu của biểu thức là 3).

Mục lục
 
Sửa lần cuối:

ngochoangimsat

Administrator
1. Khớp cơ bản
Là lột biểu thức chính quy chỉ là một mẫu các ký tự mà chúng ta sử dụng để tìm kiếm trong một văn bản. Ví dụ, biểu thức chính quy the có nghĩa là : chữ cái t, tiếp theo là chữ cái h, sau đó chữ cái e.

"the" => The fat cat sat on the mat.

Kiểm tra biểu thức chính quy online

Biểu thức chính quy 123 sẽ khớp với chuỗi 123. Biểu thức chính quy được khớp lại với chuỗi nhập vào bằng cách so sánh mỗi ký tự trong biểu thức với mỗi ký tự trong chuối đã nhập. Biểu thức chính quy phân biệt chữ hoa và chữ thường, do vậy từ the và The là khác nhau.

"The" => The fat cat sat on the mat.

Kiểm tra biểu thức chính quy online

> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <
 
Sửa lần cuối:

ngochoangimsat

Administrator
2. Các ký tự Meta
Các ký tự Meta là các khối xây dựng của biểu thức chính quy. Các ký tự Meta không đứng một mình mà thay vào đó được diễn dịch theo một số cách đặc biệt. Một vài ký tự Meta có một ý nghĩa đặc biệt và được viết bên trong ngoặc vuông. Các ký tự Meta như sau:

Mô tả ký tự Meta

.
Dấu chấm sẽ khớp với mọi ký tự đơn ngoại trừ ký tự xuống dòng.
[ ] Lớp ký tự. Sẽ khớp mọi ký tự nằm trong dấu ngoặc vuông.
[^ ] Lớp ký tự bỏ qua. Sẽ khớp mọi ký tự không có trong dấu ngoặc vuông.
* Khớp từ 0 đến lặp lại nhiều lần ký tự phía trước. Nói cách khác, ký tự đứng trước dấu * có thể lặp lại nhiều lần hoặc không lặp lại lần nào.
+ Dấu cộng. Khớp từ 1 đến lặp lại nhiều lần ký tự phía trước.Nói cách khác, ký tự đứng trước dấu + sẽ lặp lại ít nhất 1 lần.
? Ký tự đứng trước dấu hỏi chấm có thể và có thể không tồn tại.
{n,m} Khớp ít nhất "n" lần nhưng không lớn hơn "m" lần của ký tự đứng trước.
(xyz) Nhóm ký tự. Khớp các ký tự xyz theo đúng trật tự.
| Dấu hoặc. Khớp các ký tự bên trái hoặc bên phải ký hiệu.
\ Thoát ký tự tiếp theo. Kí hiệu này cho phép khớp các ký tự đặc biệt [ ] ( ) { } . * + ? ^ $ \ | như là một ký tự bình thường.
^ Khớp đầu của chuỗi nhập vào.
$ Khớp cuối của chuỗi nhập vào.
> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <
 
Sửa lần cuối:

ngochoangimsat

Administrator
2.1 Dấu chấm
Dấu chấm . là một ví dụ đơn giản nhất của ký tự Meta. Ký tự Meta . khớp toàn bộ các ký tự trong chuỗi. Nhưng nó sẽ không khớp với các ký tự return (trả về) hoặc newline (xuống dòng). Ví dụ, biểu thức chính quy .ar có nghĩa là: mọi ký tự, tiếp theo là a và tiếp theo là r.

".ar" => The car parked in the garage.

Kiểm tra biểu thức chính quy online

> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <
 

ngochoangimsat

Administrator
2.2 Tập ký tự
Tập ký tự còn được gọi là lớp ký tự. Dấu ngoặc vuông được sử dụng để biểu diễn tập ký tự. Sử dụng dấu gạch ngang bên trong một tập ký tự để biểu diễn một dải các ký tự. Trật tự của dải ký tự bên trong ngoặc vuông không quan trọng. Ví dụ biểu thức [Tt]he nghĩa là: một chữ T hoa hoặc chữ t thường, tiếp theo là chữ h, sau đó là chữ e.

"[Tt]he" => The car parked in the garage.

Kiểm tra biểu thức chính quy

Một dấu chấm bên trong tập ký tự chỉ là một dấu chấm đơn thuần. Biểu thức ar[.] nghĩa là: một chữ cái viết thường a , theo sau là chữ cái r, theo sau là một ký tự . (dấu chấm).

"ar[.]" => A garage is a good place to park a car.

Kiểm tra biểu thức chính quy

> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <

 
Sửa lần cuối:

ngochoangimsat

Administrator
2.2.1 Tập ký tự bỏ qua
Nói chung, ký hiệu dấu mũ ^ là đại diện cho sự bắt đầu của một chuỗi. Tuy nhiên khi đứng trong dấu ngoặc vuông nó có nghĩa là bỏ qua các ký tự được cấp trong dấu ngoặc vuông. Ví dụ, biểu thức [^c]ar có nghĩa là: mọi ký tự khác chữ c đều được khớp, tiếp theo là chữ a, tiếp theo là chữ r.

"[^c]ar" => The car parked in the garage.

Kiểm tra biểu thức chính quy online

> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <
 

ngochoangimsat

Administrator
2.3 Lặp lại
Các ký tự Meta như: +, * hoặc ? được sử dụng để chỉ định bao nhiêu lần một mẫu có thể xảy ra. Các ký tự Meta này tác động khác nhau trong các trường hợp khác nhau.

2.3.1 Dấu sao *
Ký hiệu * sẽ khớp từ không đến nhiều lần một ký tự cho trước. Biểu thức a* có nghĩa là: 0 đến nhiều lần chữ a lặp lại. Nhưng nếu xuất hiện sau tập ký tự thì nó sẽ tìm mọi ký tự bên trong tập ký tự. Ví dụ, biểu thức [a-z]* có nghĩa là: mọi chữ cái viết thường trong một dòng.

"[a-z]*" => The car parked in the garage #21.

Kiểm tra biểu thức chính quy online

Ký hiệu * có thể được sử dụng với ký tự Meta . (dấu chấm) để khớp mọi chuối ký tự .*. Ký hiệu * có thể được sử dụng với dấu cách \s để khớp một chuỗi của các dấu cách. Ví dụ, biểu thức \s*cat\s* có nghĩa là: có từ 0 đến nhiều dấu cách, tiếp theo là chữ c, sau đó là chữ a, sau đó là chữ t, sau đó là từ 0 đến nhiều dấu cách.

"\s*cat\s*" => The fat cat sat on the concatenation.

Kiểm tra biểu thức chính quy online

> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <

2.3.2 Dấu cộng
Ký hiệu + khớp 1 hoặc nhiều lần ký tự cho trước. Ví dụ, biểu thức c.+t có nghĩa là: chữ cái c, tiếp theo có ít nhất một ký tự, sau đó là chữ t. Nó cần được xác định rõ rằng chữ t là ở cuối câu.

"c.+t" => The fat cat sat on the mat.

Kiểm tra biểu thức chính quy online

> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <

2.3.3 Dấu hỏi chấm
Trong biểu thức chính quy, ký tự Meta ? làm cho ký tự đứng trước nó là một tùy chọn, có thể có có thể không. Ký hiệu này khớp từ 0 đến 1 lần ký tự đứng trước. Ví dụ, biểu thức [T]?he có nghĩa là: Chữ cái T có thể có có thể không, theo sau là chữ h và sau đó là chữ e.

"[T]he" => The car is parked in the garage.

Kiểm tra biểu thức chính quy online

"[T]?he" => The car is parked in the garage.

Kiểm tra biểu thức chính quy online

> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <
 
Sửa lần cuối:

ngochoangimsat

Administrator
2.4 Dấu ngoặc móc
Trong biểu thức chính quy, dấu ngoặc móc còn được gọi là bộ kiểm tra số lượng và được sử dụng để chỉ định số lần mà một ký tự hoặc một nhóm ký tự có thể lặp lại. Ví dụ, biểu thức [0-9]{2,3} có nghĩa là: khớp các số có từ 2 đến 3 chữ số ( ký tự trong dải từ 0 đến 9).

"[0-9]{2,3}" => Con số là 9.9997 nhưng chúng ta muốn làm tròn thành 10.0.

Kiểm tra biểu thức chính quy

Chúng ta có thể bỏ qua số thứ 2. Ví dụ, biểu thức [0-9]{2,} có nghĩa là: Khớp từ 2 số trở lên. Chúng ta cũng có thể bỏ qua cả dấu chấm, ví dụ [0-9]{3} có nghĩa là: Khớp chính xác 3 số.

"[0-9]{2,}" => Số ban đầu là 9.9997 nhưng ta muốn làm tròn lên 10.0.

Kiểm tra biểu thức chính quy

"[0-9]{3}" => Số ban đầu là 9.9997 nhưng ta muốn làm tròn lên 10.0.

Kiểm tra biểu thức chính quy

> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <
 
Sửa lần cuối:

ngochoangimsat

Administrator
2.5 Dấu ngoặc đơn (Capturing groups)
Chụp nhóm là một nhóm của các mẫu nhỏ mà được viết bên trong dấu ngoặc đơn (...). Như chúng ta đã thảo luận trước đó mà trong biểu thức chính quy nếu ta đặt 1 bộ kiểm tra số lượng sau 1 ký tự thì nó sẽ lặp lại ký tự đứng trước. Nhưng nếu ta đặt một bộ kiểm tra số lượng sau một nhóm thì nó sẽ lặp lại cả nhóm. Ví dụ, biểu thức (ab)* khớp từ 0 đến nhiều lần lặp lại cụm "ab". Ta cũng có thể sử dụng ký tự Meta Hoặc | bên trong một nhóm. Ví dụ, biểu thức (c|g|p)ar có nghĩa là: chữ cái c, g hoặc p, tiếp theo là chữ a, sau đó là chữ r.

"(c|g|p)ar" => The car is parked in the garage.

Kiểm tra biểu thức chính quy online

Lưu ý rằng chụp nhóm không chỉ khớp nhưng cũng chụp các ký tự để sử dụng trong ngôn ngữ gốc. Ngôn ngữ gốc có thể là python hoặc javascript hoặc hầu như mọi ngôn ngữ mà nó bổ sung chức năng biểu thức chính quy.

2.5.1 Không chụp nhóm (Non-capturing groups)
Một nhóm không chụp là một nhóm chụp mà chỉ khớp các ký tự, nhưng không chụp nhóm. Một nhóm không chụp được cấp bởi một dấu hỏi chấm ? và hai châm : sau dấu mở ngoặc trong ngoặc đơn (...). Ví dụ, biểu thức (?:c|g|p)ar tương tự như (c|g|p)ar trong đó khớp các ký tự giống nhau nhưng không tạo ra nhóm chụp.

"(?:c|g|p)ar" => The car is parked in the garage.

Kiểm tra biểu thức chính quy online

Nhóm không chụp có thể hữu ích khi sử dụng trong chức năng tìm kiếm và thay thế hoặc khi phối hợp với nhóm chụp để giữ tổng quan khi cung cấp các kiểu đầu ra khác nhau. Xem thêm [4. Tìm xung quanh](# 4. Tìm xung quanh).

> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <
 
Sửa lần cuối:

ngochoangimsat

Administrator
2.6 Dấu sổ đứng |
Trong biểu thức chính quy, dấu gạch đứng được sử dụng để định nghĩa cho sự luân phiên. Luân phiên giống như là một điều kiện giữa nhiều biểu thức. Bây giờ, bạn có thể đang nghĩ rằng tập ký tự (lớp ký tự) có thể làm việc cùng cách này. Nhưng sự khác biệt lớn nhất giữa tập ký tự [] và luân phiên | ở chỗ: tập ký tự làm việc ở cấp độ ký tự còn luân phiên làm việc ở cấp độ biểu thức. Ví dụ, biểu thức (T|t)he|car có nghĩa là: chữ T hoặc t, sau đó là chữ h, sau đó là chữ e Hoặc chữ c, tiếp theo là chữ a, sau đó là chữ r.

"(T|t)he|car" => The car is parked in the garage.

Kiểm tra biểu thức chính quy online

> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <
 
Sửa lần cuối:

ngochoangimsat

Administrator
2.7 Thoát ký tự đặc biệt
Dấu gạch sổ \ được sử dụng trong biểu thức chính quy để thoát ký tự tiếp theo. Việc này cho phép chúng ta chỉ định một ký tự như là một ký tự được khớp bao gồm các ký tự đặc biệt { } [ ] / \ + * . $ ^ | ?. Để sử dụng các ký tự đặc biệt như là một ký tự thường cần cấp một dấu gạch sổ \ ở phía trước nó.

Ví dụ, biểu thức . được sử dụng để khớp mọi ký tự ngoại trừ ký tự xuống dòng. Bây giờ để khớp dấu chấm . trong một chuỗi đã nhập vào. Biểu thức (f|c|m)at\.? có nghĩa là: chữ f, c hoặc m, sau đó là chữ a, theo sau là chữ t, sau đó là tùy chọn có hoặc không có ký tự dấu chấm .

"(f|c|m)at\.?" => The fat cat sat on the mat.

Kiểm tra biểu thức chính quy online

> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <
 
Sửa lần cuối:

ngochoangimsat

Administrator
2.8 Neo
Trong các biểu thức chính quy, chúng ta sử dụng neo để kiểm tra xem ký tự được khớp là có là ký tự bắt đầu hoặc kết thúc của chuỗi hay không. Neo có 2 loại: Loại thứ nhất là dấu mũ ^ mà nó kiểm tra xem ký tự khớp có phải là ký tự bắt đầu không; Loại thứ 2 là dấu đô la $ mà nó kiểm tra xem ký tự khớp có phải là ký tự cuối cùng của chuỗi không.

2.8.1 Dấu mũ
Ký hiệu dấu mũ ^ được sử dụng để kiểm tra xem ký tự khớp có phải là ký tự đầu tiên của chuỗi không. Nếu ta áp dụng biểu thức ^a với chuỗi nhập vào là abc nó sẽ khớp chữ a. Nhưng nếu chúng ta áp dụng biểu thức ^bon với chuỗi abc nó sẽ không khớp chữ nào. Bởi vì trong chuỗi abc thì chữ b không phải ký tự bắt đầu của chuỗi. Hãy xem xét tiếp một biểu thức khác ^(T|t)he có nghĩa là: chữ T hoặc t là ký tự bắt đầu của chuỗi, sau đó là chữ h, tiếp theo là chữ e. So sánh việc có dùng neo và không dùng neo trong 2 trường hợp sau:

"(T|t)he" => The car is parked in the garage.

Kiểm tra biểu thức chính quy online

"^(T|t)he" => The car is parked in the garage.

Kiểm tra biểu thức chính quy online

2.8.2 Dấu đô la
Kí hiệu đô la $ được sử dụng để kiểm tra xem ký tự khớp có phải là ký tự cuối cùng trong chuỗi không. Ví dụ, biểu thức (at\.)$ có nghĩa là: chữ a, sau đến chữ t, sau đó là chữ a. Ký tự dấu chấm . phải ở cuối của chuỗi. So sánh hai biểu thức có và không có neo sau:

"(at\.)" => The fat cat. sat. on the mat.

Kiểm tra biểu thức chính quy online

"(at\.)$" => The fat cat. sat. on the mat.

Kiểm tra biểu thức chính quy online

> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <
 
Sửa lần cuối:

ngochoangimsat

Administrator
3. Tập ký tự viết tắt
Biểu thức chính quy cung cấp các chữ viết tắt cho các tập ký tự thường dùng. Các ký tự viết tắt như sau:

Mô tả các ký tự
. Mọi ký tự trừ ký tự xuống dòng
\w Khớp các chữ và số: [a-zA-Z0-9_]
\W Khớp các ký tự không phải chữ và số: [^\w]
\d Khớp các số [0-9]
\D Khớp các ký tự không phải số: [^\d]
\s Khớp các khoảng trắng: [\t\n\f\r\p{Z}]
\S Khớp các ký tự không phải khoảng trắng: [^\s]

> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <
 
Sửa lần cuối:

ngochoangimsat

Administrator
4. Tìm kiếm xung quanh (lookarounds)
Tìm kiếm phía sau (Lookbehind) và tìm kiếm phía trước (lookahead) còn được gọi là tìm kiếm xung quanh (lookarounds) là kiểu đặc biệt của các nhóm không chụp (non-capturing groups) (Được sử dụng để khớp mẫu nhưng không bao gồm trong danh sách khớp). Tìm phía trước được sử dụng khi chúng ta có điều kiện là mẫu này đứng trước hoặc theo sau một mẫu khác. Ví dụ, ta muốn nhận các số đứng sau ký tự đô la $ trong chuỗi đầu vào $4.44 và $10.88. Ta sẽ sử dụng biểu thức sau (?<=\$)[0-9\.]* nó có nghĩa là: lấy hết các số mà bao gồm cả dấu chấm và đứng sau ký tự $. Dưới đây là các các lookarounds được sử dụng trong biểu thức chính quy:

Ký hiệu Mô tả
?= Positive Lookahead (tìm tất cả ký tự cho trước mà nó đứng trước một ký tự chỉ định)
?! Negative Lookahead (tìm tất cả các ký tự cho trước mà nó không đứng trước một ký tự chỉ định)
?<= Positive Lookbehind (tìm tất cả ký tự cho trước mà nó đứng sau một ký tự chỉ định)
?<! Negative Lookbehind (tìm tất cả các ký tự cho trước mà nó không đứng sau một ký tự chỉ định)

4.1 Tìm các ký tự X đứng trước ký tự Y (Positive Lookahead)

The positive lookahead asserts that the first part of the expression must be followed by the lookahead expression. The returned match only contains the text that is matched by the first part of the expression. To define a positive lookahead, parentheses are used. Within those parentheses, a question mark with equal sign is used like this: (?=...). Lookahead expression is written after the equal sign inside parentheses. For example, the regular expression (T|t)he(?=\sfat) means: optionally match lowercase letter t or uppercase letter T, followed by letter h, followed by letter e. In parentheses we define positive lookahead which tells regular expression engine to match The or the which are followed by the word fat.

Positive lookahead yêu cầu phần thứ nhất của biểu thức phải đứng trước biểu thức lookahead. Giá trị khớp trả về chỉ bao gồm văn bản mà nó khớp với phần thứ nhất của biểu thức. Để định nghĩa một positive lookahead, dấu ngoặc đơn được sử dụng. Trong dấu ngoặc đơn, dấu hỏi chấm và dấu bằng được sử dụng như sau (?=...). Biểu thức lookahead được viết sau dấu bằng trong ngoặc đơn. Ví dụ, biểu thức (T|t)he(?=\sfat) có nghĩa là: khớp chữ T hoặc t, tiếp theo là chữ h và chữ e. Trong dấu ngoặc đơn chúng ta định nghĩa positive lookahead mà nó báo cho máy biểu thức chính quy khớp chữ "The" hoặc chữ "the" mà theo sau nó là chữ "fat".

"(T|t)he(?=\sfat)" => The fat cat sat on the mat.

Kiểm tra biểu thức chính quy

4.2 Tìm các ký tự X không đứng trước ký tự Y (Negative Lookahead)
Negative lookahead is used when we need to get all matches from input string that are not followed by a pattern. Negative lookahead is defined same as we define positive lookahead but the only difference is instead of equal = character we use negation ! character i.e. (?!...). Let's take a look at the following regular expression (T|t)he(?!\sfat) which means: get all The or the words from input string that are not followed by the word fat precedes by a space character.

Negative lookahead được sử dụng khi chúng ta muốn nhận được tất cả các ký tự mà nó được khớp từ chuỗi đầu vào và nó không đứng ngay trước mẫu nhập vào biểu thức. Negative lookahead được định nghĩa tương tự như ta định nghĩa positive lookahead nhưng chỉ khác là thay vì dùng dấu bằng = ta dùng dấu chấm than ! , tức là (?!...). Hãy xem xem biểu thức (T|t)he(?!\sfat) nó có nghĩa là lấy tất cả chữ "The" hoặc chữ "the" từ chuỗi đầu vào mà không đứng trước từ "fat" có dấu cách ở trước.

"(T|t)he(?!\sfat)" => The fat cat sat on the mat.

Kiểm tra biểu thức chính quy online

4.3 Tìm các ký tự X đứng sau ký tự Y (Positive Lookbehind)
Positive lookbehind is used to get all the matches that are preceded by a specific pattern. Positive lookbehind is denoted by (?<=...). For example, the regular expression (?<=(T|t)he\s)(fat|mat) means: get all fat or mat words from input string that are after the word The or the.

Positive lookbehind được sử dụng để lấy các ký tự được khớp và đứng sau mẫu chỉ định. Positive lookbehind được cấp bởi (?≤...). Ví dụ, biểu thức (?<=(T|t)he\s)(fat|mat) có nghĩa là: lấy tất cả chữ "fat" hoặc "mat" từ chuỗi đầu vào mà nó đứng sau từ "The" hoặc "the".


"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.

Test the regular expression

4.4 Tìm các ký tự X không đứng sau ký tự Y (Negative Lookbehind)
Negative lookbehind is used to get all the matches that are not preceded by a specific pattern. Negative lookbehind is denoted by (?<!...). For example, the regular expression (?<!(T|t)he\s)(cat) means: get all cat words from input string that are not after the word The or the.

Negative lookbehind được sử dụng để lấy các ký tự khớp với và không đứng sau mẫu chỉ định. Negative lookbehind được cấp bởi (?<!...). Ví dụ, biểu thức (?<!(T|t)he\s)(cat) có nghĩa là: lấy tất cả từ "cat" của chuỗi đầu vào mà không đứng sau từ "The" hoặc "the".

"(?<!(T|t)he\s)(cat)" => The cat sat on cat.

Kiểm tra biểu thức chính quy online


4.5. Một vài ví dụ thường gặp trong thực tế

Ví dụ 1: Chọn string nằm giữa 2 tags html như sau <pre>.........</pre>

Biểu thức: (?<=\<pre\>)(\s*.*\s*)(?=\<\/pre\>) => Đây là chuỗi không lấy <pre>còn đây là chuỗi sẽ lấy</pre>. Đây cũng là chuỗi không lấy


Ví dụ 2: Chọn toàn bộ text không phải là "đây là nội dung không lấy" từ chuỗi sau (tức là các ký tự nằm ngoài <Tag>.....<T>)

^.*(?<=\<Tag\>)|(?=\<T\>).* => Đây là nội dung cần lấy<Tag>đây là nội dung không lấy<T> đây cũng là nội dung cần lấy


> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <
 
Sửa lần cuối:

ngochoangimsat

Administrator
5. Cờ (Flags)
Cờ còn được gọi là các modifiers bởi vì chúng chỉnh sửa đầu ra của biểu thức chính quy. Các cờ có thể được sử dụng với trật tự bất kỳ hoặc tổ hợp và là một phần không thể thiếu của biểu thức chính quy.

Cờ Mô tả
i Case insensitive: Thiết lập không phân biệt chữ hoa chữ thường.
g Global Search: Tìm kiếm một mẫu trong toàn bộ chuỗi đầu vào.
m Multiline: Anchor meta character works on each line.


5.1 Case Insensitive
The i modifier is used to perform case-insensitive matching. For example, the regular expression /The/gi means: uppercase letter T, followed by lowercase character h, followed by character e. And at the end of regular expression the i flag tells the regular expression engine to ignore the case. As you can see we also provided g flag because we want to search for the pattern in the whole input string.

"The" => The fat cat sat on the mat.

Test the regular expression

"/The/gi" => The fat cat sat on the mat.

Test the regular expression

5.2 Global search
The g modifier is used to perform a global match (find all matches rather than stopping after the first match). For example, the regular expression/.(at)/g means: any character except new line, followed by lowercase character a, followed by lowercase character t. Because we provided g flag at the end of the regular expression now it will find all matches in the input string, not just the first one (which is the default behavior).

"/.(at)/" => The fat cat sat on the mat.

Test the regular expression

"/.(at)/g" => The fat cat sat on the mat.

Test the regular expression

5.3 Multiline
The m modifier is used to perform a multi-line match. As we discussed earlier anchors (^, $) are used to check if pattern is the beginning of the input or end of the input string. But if we want that anchors works on each line we use m flag. For example, the regular expression /at(.)?$/gm means: lowercase character a, followed by lowercase character t, optionally anything except new line. And because of m flag now regular expression engine matches pattern at the end of each line in a string.

"/.at(.)?$/" => The fat
cat sat
on the mat.

Test the regular expression

"/.at(.)?$/gm" => The fat
cat sat
on the mat.

Test the regular expression

> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <
 
Sửa lần cuối:

ngochoangimsat

Administrator
6. Greedy vs lazy matching
Theo mặc định regex sẽ thực hiện khớp ở chế độ greedy, có nghĩa là nó sẽ khớp nhiều giá trị nhất có thể. Chúng ta có thể sử dụng ? để khớp theo chế độ lazy có nghĩa là sẽ khớp ít nhất có thể

"/(.*at)/" => The fat cat sat on the mat.
Kiểm tra biểu thức chính quy online

"/(.*?at)/" => The fat cat sat on the mat.
Kiểm tra biểu thức chính quy online

> Quay về mục lục của hướng dẫn sử dụng biểu thức chính quy (Regex) <
 
Sửa lần cuối:

ngochoangimsat

Administrator
This is a simple task to do a HTTP Get, and get one part from the entire page source, but isn't working.
Joke (36)
A1: HTTP Get [ Server:port:www.jokes.com Path: Attributes: Cookies: Timeout:10 Mime Type: Output File: ]
A2: Variable Set [ Name:%sms To:%HTTPD Do Maths:Off Append:Off ]
A3: Variable Search Replace [ Variable:%sms Search:class="fulltext">.*</span> Ignore Case:On Multi-Line:On One Match Only:On Store Matches In:%smsres Replace Matches:Off Replace With: ]
A4: Flash [ Text:%smsres1 Long:Off ]


The flash action only flashes %smsres1. What an I doing wrong?


Your regex doesn't work because the .+ will not match a line break. To match basically everything you can use [\s\S]+ or your regex would look like:

class="fulltext">[\s\S]+</span>

but that will return way too much because it will match everything up to the last </span> (the regex is greedy)

to make it non-greedy add a ? before </span>


class="fulltext">[\s\S]+?</span>


This will return a multi line selection with regex.

In my opinion this is a case where using Variable Split would be a much better approach due to the size of the data being parsed.
 
Top