Đi sâu hơn vào các biểu thức chính quy nâng cao

Biểu thức chính quy (regex) là công cụ mạnh mẽ để khớp mẫu và thao tác văn bản. Vượt ra ngoài những điều cơ bản, hướng dẫn này khám phá các khái niệm biểu thức chính quy nâng cao để xử lý các tác vụ xử lý văn bản phức tạp.

Xác nhận quan sát nâng cao

Các xác nhận xem xét xung quanh cho phép bạn chỉ khớp một mẫu nếu mẫu đó đứng trước hoặc theo sau một mẫu khác mà không bao gồm văn bản xung quanh trong kết quả khớp.

  • 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ụ:

(?<=\$)\d+

Regex này khớp với các số đứng trước ký hiệu đô la.

Nhóm nguyên tử

Các nhóm nguyên tử ngăn chặn việc quay lại sau khi nỗ lực khớp được thực hiện trong nhóm. Chúng rất hữu ích để cải thiện hiệu suất bằng cách tránh việc quay lại không cần thiết.

Ví dụ:

(?>\d+)\b

Regex này khớp một chuỗi các chữ số dưới dạng một nhóm nguyên tử, ngăn chặn việc quay lại.

Tham khảo ngược

Phản hồi cho phép bạn sử dụng lại nhóm đã chụp trước đó trong mẫu biểu thức chính quy của mình. Điều này rất hữu ích để khớp các chuỗi con lặp lại.

Ví dụ:

(\b\w+)\s+\1

Regex này khớp với một từ theo sau là cùng một từ.

Nhóm được đặt tên

Các nhóm được đặt tên cho phép bạn chỉ định tên cho các nhóm thu thập, giúp biểu thức chính quy của bạn dễ đọc hơn và dữ liệu phù hợp dễ tham khảo hơn.

Ví dụ:

(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})

Regex này khớp với các ngày ở định dạng YYYY-MM-DD và đặt tên cho các nhóm năm, tháng và ngày.

Mẫu đệ quy

Các mẫu đệ quy cho phép biểu thức chính quy khớp với các cấu trúc lồng nhau, chẳng hạn như dấu ngoặc đơn cân bằng. Đây là một tính năng nâng cao được hỗ trợ bởi một số công cụ biểu thức chính quy.

Ví dụ:

\((?>[^()]+|(?R))*\)

Regex này khớp với dấu ngoặc đơn cân bằng.

Sử dụng Regex trong các ngôn ngữ lập trình khác nhau

Regex được hỗ trợ trong nhiều ngôn ngữ lập trình, thường có những thay đổi nhỏ về cú pháp và khả năng. Dưới đây là các ví dụ bằng Python và JavaScript:

Ví dụ về Python

import re

# Match a word followed by the same word
pattern = r'(\b\w+)\s+\1'
text = 'hello hello world'
match = re.search(pattern, text)

if match:
    print('Match found:', match.group())
else:
    print('No match found')

Ví dụ về JavaScript

// Match a word followed by the same word
const pattern = /(\b\w+)\s+\1/;
const text = 'hello hello world';
const match = text.match(pattern);

if (match) {
    console.log('Match found:', match[0]);
} else {
    console.log('No match found');
}

Phần kết luận

Các khái niệm biểu thức chính quy nâng cao như xác nhận xem xét, nhóm nguyên tử, tham chiếu ngược, nhóm được đặt tên và mẫu đệ quy có thể nâng cao đáng kể khả năng xử lý văn bản của bạn. Bằng cách nắm vững các kỹ thuật này, bạn có thể giải quyết 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.