Nắm vững các biểu thức chính quy phức tạp
Biểu thức chính quy (regex) là các công cụ linh hoạt để khớp mẫu và thao tác văn bản. Hướng dẫn này khám phá các kỹ thuật biểu thức chính quy nâng cao giúp bạn quản lý các tình huống xử lý văn bản phức tạp hiệu quả hơn.
Nhìn lại những khẳng định
Các xác nhận nhìn phía sau cho phép bạn so khớp một mẫu chỉ khi mẫu đó đứng trước một mẫu khác. Điều này rất hữu ích để đảm bảo bối cảnh mà không đưa nó vào trận đấu.
- Cái nhìn tích cực
(?<=...)
: Chỉ khớp với mẫu nếu nó đứng trước biểu thức đã chỉ định. - Cái nhìn phủ định
(?<!...)
: Chỉ khớp với mẫu nếu nó không đứng trước biểu thức đã chỉ định.
Ví dụ:
(?<=Mr\.|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}-)?\d{3}-\d{4}
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.