Khai phá sức mạnh của biểu thức chính quy nâng cao
Biểu thức chính quy (regex) cung cấp các công cụ mạnh mẽ để khớp mẫu và thao tác văn bản. Bài viết này khám phá các khái niệm biểu thức chính quy nâng cao giúp bạn giải quyết các tác vụ xử lý văn bản phức tạp một cách chính xác và hiệu quả.
Các xác nhận nhìn trước và sau
Các xác nhận nhìn trước và nhìn sau chỉ cho phép bạn khớp một mẫu nếu có trước hoặc theo sau một mẫu khác. Chúng rất hữu ích để đảm bảo bối cảnh mà không đưa nó vào trận đấu.
- Nhìn tích cực
(?=...)
: Đảm bảo mẫu chỉ khớp nếu nó được theo sau bởi biểu thức đã chỉ định. - Cái nhìn tiêu cực
(?!...)
: Đảm bảo mẫu chỉ khớp nếu nó không được theo sau bởi biểu thức đã chỉ định. - Cái nhìn tích cực
(?<=...)
: Đảm bảo mẫu chỉ khớp nếu nó đứng trước biểu thức đã chỉ định. - Cái nhìn tiêu cực
(?<!...)
: Đảm bảo mẫu chỉ khớp nếu nó không đứng trước biểu thức đã chỉ định.
Ví dụ:
(?<=Mr\.\s|Mrs\.\s)[A-Z]\w+
Regex này khớp với các tên có trước "Mr." hoặc "Mrs.".
Mẫu có điều kiện
Các mẫu có điều kiện cho phép bạn khớp các mẫu khác nhau dựa trên việc có đáp ứng một điều kiện nhất định hay không. Cú pháp là (?(condition)true-pattern|false-pattern)
.
Ví dụ:
(\d{3}-)?(?(1)\d{3}-\d{4}|\d{7})
Regex này khớp với số điện thoại có hoặc không có mã vùng.
Chương trình con và đệ quy
Các chương trình con và đệ quy cho phép bạn sử dụng lại các mẫu trong cùng biểu thức chính quy hoặc khớp với các cấu trúc lồng nhau. Điều này đặc biệt hữu ích cho dữ liệu phức tạp và lồng nhau.
Ví dụ:
(?<group>\((?>[^()]+|(?&group))*\))
Regex này khớp các dấu ngoặc đơn cân bằng với các mức lồng nhau.
Số lượng sở hữu
Bộ định lượng sở hữu ngăn không cho công cụ biểu thức chính quy quay lui, điều này có thể cải thiện hiệu suất khi bạn muốn đảm bảo rằng không xảy ra hiện tượng quay lui.
Ví dụ:
\w++
Regex này khớp một chuỗi các ký tự từ một cách sở hữu, nghĩa là nó sẽ không loại bỏ các ký tự một khi đã khớp.
Sử dụng cờ để so khớp nâng cao
Cờ Regex sửa đổi hành vi khớp mẫu. Một số cờ phổ biến bao gồm:
- i: So khớp không phân biệt chữ hoa chữ thường.
- m: Chế độ nhiều dòng, ảnh hưởng đến hoạt động của
^
và$
. - s: Chế độ Dotall, cho phép
.
khớp với các ký tự dòng mới. - x: Bỏ qua khoảng trắng và cho phép nhận xét trong mẫu để dễ đọc.
Ví dụ:
/pattern/imsx
Mẫu này áp dụng các chế độ không phân biệt chữ hoa chữ thường, nhiều dòng, dotall và mở rộng.
Ví dụ trong ngôn ngữ lập trình
Dưới đây là một số ví dụ về cách sử dụng biểu thức chính quy nâng cao trong Python và JavaScript:
Ví dụ về Python
import re
# Match a name preceded by Mr. or Mrs.
pattern = r'(?<=Mr\.|Mrs\.)\s[A-Z]\w+'
text = 'Mr. Smith and Mrs. Johnson'
matches = re.findall(pattern, text)
for match in matches:
print('Match found:', match)
Ví dụ về JavaScript
// Match a name preceded by Mr. or Mrs.
const pattern = /(?<=Mr\.|Mrs\.)\s[A-Z]\w+/g;
const text = 'Mr. Smith and Mrs. Johnson';
const matches = text.match(pattern);
if (matches) {
matches.forEach(match => console.log('Match found:', match));
}
Phần kết luận
Các kỹ thuật biểu thức chính quy nâng cao như xác nhận nhìn phía sau, mẫu điều kiện, chương trình con, đệ quy và bộ định lượng sở hữu sẽ mở rộng khả năng của biểu thức chính quy để xử lý văn bản phức tạp. Việc nắm vững các khái niệm này cho phép bạn xử lý các tác vụ đối sánh và thao tác phức tạp với hiệu quả và độ chính xác cao hơn.