Biểu thức chính quy, thường được gọi là Regex, là một trong những nguồn lực mạnh mẽ và linh hoạt nhất trong thế giới phát triển, quản trị hệ thống và xử lý khối lượng văn bản lớn. Tuy nhiên, đối với nhiều người dùng và lập trình viên lần đầu tiếp cận, cú pháp của nó có thể khó hiểu hoặc thậm chí là quá sức. Việc nắm vững các quy tắc và mẫu Regex cho phép tìm kiếm, lọc, xác thực và chuyển đổi văn bản với hiệu quả và tính linh hoạt vô song.
Bạn đã bao giờ tự hỏi làm thế nào để tìm ra các mẫu phức tạp trong tài liệu, xác thực biểu mẫu, chuyển đổi dữ liệu hoặc tự động hóa quy trình tìm kiếm trong các dự án CNTT của mình chưa? Cho dù bạn là nhà phát triển, quản trị viên hệ thống hay chỉ là người dùng tò mò, bài viết này là dành cho bạn. Hãy chuẩn bị cho một hướng dẫn đầy đủ, thiết thực và trên hết là rõ ràng về các quy tắc Regex và ứng dụng của chúng trong mọi loại ngữ cảnh.
Quy tắc Regex hoặc biểu thức chính quy là gì?
Biểu thức chính quy (Regex, viết tắt của tiếng Anh là Regular Expression) là chuỗi hoặc mẫu ký tự có khả năng xác định các quy tắc để tìm kiếm, xác thực hoặc thao tác văn bản trong các văn bản khác. Hãy tưởng tượng bạn đang tìm kiếm các cụm từ cụ thể, định dạng cụ thể (như email, ngày tháng, số điện thoại), tên đáp ứng các tiêu chí nhất định hoặc bạn muốn thay thế hàng loạt các phần của văn bản: trong tất cả các trường hợp này, Regex là công cụ lý tưởng.
Ý tưởng cơ bản là Mô tả, bằng một loạt các ký hiệu, chữ cái và toán tử đặc biệt, mẫu mà văn bản chúng ta muốn định vị, xác thực hoặc sửa đổi phải đáp ứng.Ví dụ, nếu bạn muốn tìm tất cả các số trong một cụm từ, bạn có thể xác định một mẫu đơn giản có nội dung là "bất kỳ ký tự số nào" (như \d). Nếu bạn muốn điều gì đó nâng cao hơn, bạn có thể xây dựng các quy tắc phức tạp như: “tất cả các chuỗi bắt đầu bằng 'Copy' và kết thúc bằng một số”.

Lịch sử và sự phát triển của Regex
Biểu thức chính quy ra đời vào giữa thế kỷ 20, trong lĩnh vực logic hình thức và lý thuyết máy tự động. Ứng dụng thực tế đầu tiên của nó là trong các hệ thống dựa trên UNIX, với các tiện ích như ed, grep, khát y ôi. Sau đó, tiêu chuẩn POSIX mở rộng cú pháp của nó và kết hợp nó vào nhiều môi trường. Sau đó, ngôn ngữ Perl đưa Regex lên một tầm cao mới, bổ sung các tính năng mới và phổ biến chúng trong cộng đồng nhà phát triển.
Hiện tại, Regex được tích hợp vào hầu hết các ngôn ngữ lập trình (JavaScript, Python, Java, C#, PHP, Ruby, v.v.), cũng như các trình soạn thảo văn bản nâng cao, hệ điều hành, khung web và nhiều tiện ích dòng lệnh. Điều này làm cho các quy tắc Regex trở thành ngôn ngữ thực sự phổ quát để xử lý văn bản trong bất kỳ bối cảnh điện toán nào.
Quy tắc Regex có tác dụng gì?
Quy tắc regex không chỉ dùng để tìm kiếm; chúng còn có chức năng xác thực, trích xuất, chuyển đổi, lọc hoặc sửa đổi khối lượng dữ liệu lớn chỉ trong vài giây.
- Tìm kiếm các mẫu trong các văn bản lớn: Tìm email, URL, tên, số, ngày tháng và nhiều thông tin khác, ngay cả trong các tệp hoặc cơ sở dữ liệu lớn, mà không cần tốn nhiều công sức.
- Xác thực thông tin đầu vào của người dùng: Kiểm tra xem mật khẩu, số điện thoại hoặc địa chỉ email có đáp ứng các yêu cầu hay không trước khi lưu trữ.
- Sửa đổi và thay thế văn bản: Thay thế các phần cụ thể của văn bản, từ việc xóa thẻ HTML đến chuẩn hóa định dạng dữ liệu.
- Tự động hóa các quy trình: Lọc nhật ký, chuyển đổi danh sách, phân tích tệp nhật ký hoặc đổi tên tệp hàng loạt theo các quy tắc rất chính xác.
Regex cơ bản: Các khái niệm cơ bản
Quy tắc Regex được tạo thành từ sự kết hợp giữa các ký tự theo nghĩa đen và siêu ký tự. Hiểu các yếu tố này là nền tảng để xây dựng các mẫu hữu ích.
1. Ký tự theo nghĩa đen
Một ký tự theo nghĩa đen đại diện chính xác cho ký tự bạn muốn tìm kiếm. Ví dụ, biểu thức casa sẽ xác định chính xác trình tự đó, theo thứ tự đó, trong văn bản đích.
2. Siêu ký tự: sức mạnh của Regex
Siêu ký tự là các ký hiệu đặc biệt mở rộng ý nghĩa của biểu thức chính quy, mang lại cho chúng tính linh hoạt và sức mạnh. Những loại phổ biến nhất bao gồm:
- . Dấu chấm biểu thị bất kỳ ký tự nào ngoại trừ ký tự ngắt dòng.
- [] Dấu ngoặc vuông xác định các lớp hoặc tập hợp các ký tự được phép.
- ^ Dấu mũ có thể đánh dấu sự bắt đầu của một dòng/từ hoặc nếu được đặt trong dấu ngoặc đơn, thì đó là sự phủ định của một tập hợp.
- $ Biểu tượng đô la biểu thị sự kết thúc của một dòng hoặc văn bản.
- * Dấu hoa thị cho phép bạn tìm kiếm “không hoặc nhiều lần lặp lại” của phần tử trước đó.
- + Dấu cộng sẽ tìm kiếm “một hoặc nhiều lần lặp lại”.
- ? Chỉ ra rằng phần tử trước đó là tùy chọn (không có hoặc một lần).
- () Dấu ngoặc đơn nhóm các phần của một biểu thức để áp dụng lượng từ, trích xuất các nhóm con hoặc xác định các phương án thay thế.
- | Thanh dọc biểu thị phương án logic "hoặc".
- \ Dấu gạch chéo ngược thoát khỏi ý nghĩa đặc biệt của ký tự tiếp theo hoặc giới thiệu các chuỗi viết tắt (chẳng hạn như \d, \w, \s).
3. Các số lượng: kiểm soát sự lặp lại
Các bộ lượng hóa cho phép bạn xác định số lần lặp lại của một ký tự, lớp hoặc nhóm:
- *: Không có hoặc có nhiều lần lặp lại.
- +: Một hoặc nhiều lần.
- ?: Một lần hoặc không bao giờ (tùy chọn).
- {N}: Chính xác n sự lặp lại.
- {N,}: Ít nhất n lần (không có tối đa).
- {n, m}: Giữa n y m sự lặp lại.
4. Các lớp ký tự và chữ viết tắt
Các lớp ký tự cho phép chúng ta thu hẹp hơn nữa những gì chúng ta muốn tìm kiếm:
- [az]: bất kỳ chữ cái thường nào.
- [AZ]: chữ in hoa.
- [0-9]: bất kỳ chữ số nào.
- [abc]: chữ cái a, b hoặc c.
- [^ xyz]: bất kỳ ký tự nào ngoại trừ x, i, z.
- \d: chữ số thập phân (tương đương với [0-9]).
- \D: bất kỳ ký tự nào Không là một chữ số.
- \w: ký tự từ (chữ cái, số hoặc dấu gạch dưới; tương đương với [a-zA-Z0-9_]).
- \W: bất kỳ ký tự nào không phải là từ.
- \s: khoảng trắng (khoảng trắng, tab, ngắt dòng).
- \S: bất kỳ ký tự nào ngoại trừ khoảng trắng.
5. Mỏ neo: đặt mẫu trong văn bản
Mỏ neo cho phép bạn đặt các mẫu ở đầu hoặc cuối dòng, hoặc ở đầu/cuối từ.
- ^: bắt đầu dòng hoặc văn bản.
- $: cuối dòng hoặc cuối văn bản.
- \b: ranh giới từ (bắt đầu hoặc kết thúc).
- \B: điểm ranh giới không phải từ (bên trong).
Ví dụ thực tế về quy tắc Regex
Bây giờ chúng ta hãy xem những quy tắc này áp dụng như thế nào vào các tình huống thực tế, cả đơn giản lẫn nâng cao, để bạn có thể nhanh chóng áp dụng những gì đã học vào thực tế.
- Xác thực email: ^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,6})+$
- Xác định số DNI: \b\d{8}[- ]?[trwagmyfpdxbnjzsqvhlcke]?\b
- Phát hiện địa chỉ IP v4: ^(?:(?:25[0-5]|2[0-4]\d|1?\d?\d)(?:\.(?!$)|$)){4}$
- Trích xuất URL từ thẻ HTML:
- Phát hiện các dòng được chú thích trong Java: //[^\r\n]*[\r\n]
Tùy chỉnh logic và mẫu nâng cao
Regex cho phép bạn xây dựng các mẫu phức tạp bằng cách kết hợp các nhóm, sự thay thế, tham chiếu và các số lượng hóa nâng cao, cho phép bạn lọc, xác thực hoặc định vị thông tin rất cụ thể.
Nhóm và hiệp hội
Bằng cách bao quanh một phần của mẫu trong dấu ngoặc đơn, chúng ta tạo ra một nhóm. Điều này cho phép chúng ta áp dụng lượng từ cho toàn bộ nhóm, trích xuất thông tin hoặc tham chiếu các mẫu con.
Ví dụ, biểu thức ((ma)+b) sẽ khớp với “mab” hoặc “mamab”, nhưng không khớp với “maab”. Các nhóm có thể được tham chiếu sau bằng cách sử dụng \1, \2, v.v., lý tưởng để tìm các mẫu lặp lại tương tự.
Các lựa chọn thay thế (|): logic "hoặc" trong Regex
Thanh dọc | cho phép bạn xác định các phương án thay thế: bất kỳ mẫu nào được phân tách bằng ký hiệu này đều có hiệu lực. Ví dụ, (boy|girl) sẽ khớp với cả hai từ.
Thoát khỏi các siêu ký tự bằng \
Dấu gạch chéo ngược \ Điều quan trọng là phải vô hiệu hóa ý nghĩa đặc biệt của siêu ký tự hoặc đưa vào các chuỗi ký tự rút gọn. Ví dụ: “\.” sẽ tìm kiếm dấu chấm theo nghĩa đen, “\?” sẽ tìm kiếm dấu chấm hỏi, “\\” sẽ tìm kiếm dấu gạch chéo ngược, v.v.
Các số lượng tham lam và lười biếng
Theo mặc định, các bộ lượng hóa Regex có tính tham lam: chúng lấy càng nhiều văn bản càng tốt. Thêm ? Nó được đổi thành “lazy”, tức là nắm bắt được mức tối thiểu cần thiết.
Ví dụ: chó sẽ tìm chuỗi dài nhất giữa “perr” và “o”, trong khi chó sẽ nắm bắt được mức tối thiểu.
Khẳng định và nhìn xung quanh
Khẳng định nhìn trước và nhìn sau cho phép bạn xác thực các điều kiện "trước" hoặc "sau" một kết quả khớp mà không cần sử dụng các ký tự trong văn bản.
- Nhìn về phía trước tích cực: (?=mẫu hình) Kiểm tra xem có tìm thấy “mẫu” sau vị trí hiện tại không.
- Nhìn về phía trước tiêu cực: (?!mẫu) Kiểm tra xem “mẫu” KHÔNG có ở bên dưới.
- Nhìn lại tích cực/tiêu cực: (?<=mẫu) y (? Họ làm điều tương tự "theo hướng ngược lại".
Ứng dụng thực tế của Regex trong thế giới thực
Biểu thức chính quy được sử dụng trong nhiều lĩnh vực và công việc hàng ngày:
- Xác thực biểu mẫu: email, số điện thoại, tên, mật khẩu mạnh.
- Xử lý nhật ký và kiểm tra hệ thống: Tìm kiếm các mẫu trong tệp nhật ký, trích xuất lỗi và cảnh báo.
- Quản lý SEO và URL: Viết lại URL trong .htaccess, bộ lọc tham số, phân đoạn tìm kiếm.
- Chỉnh sửa văn bản hàng loạt: Dọn dẹp thẻ HTML, xóa khoảng trắng thừa, chuẩn hóa dữ liệu trong bảng tính, điều chỉnh mã cũ.
- Phát triển và tự động hóa web: kiểm tra tự động, cấu hình quy tắc máy chủ, phát triển công cụ thu thập dữ liệu.
Các hương vị và công cụ Regex khác nhau
Không phải tất cả các triển khai Regex đều hỗ trợ các khả năng giống nhau; có nhiều "phiên bản" khác nhau tùy thuộc vào ngôn ngữ, công cụ hoặc công cụ được sử dụng.
- VỊ TRÍ: Cú pháp nguyên thủy dựa trên UNIX. Ít mở rộng hơn Perl hoặc PCRE.
- Perl/PCRE: Rất đầy đủ, chúng hỗ trợ tìm kiếm xung quanh, tham chiếu nâng cao, trình sửa đổi và chương trình con.
- jav: Được sử dụng rộng rãi trên web, tương thích với hầu hết các nhà khai thác, nhưng có những hạn chế trong việc tìm kiếm phía sau (trừ các phiên bản hiện đại).
- .NET và các ngôn ngữ khác: Chúng thường tương thích với PCRE, nhưng bạn nên tham khảo tài liệu hướng dẫn sử dụng ngôn ngữ đó.
Do đó, bất cứ khi nào bạn làm việc trong một bối cảnh cụ thể, hãy kiểm tra xem Regex chấp nhận hỗ trợ và cú pháp nào trong công cụ hoặc ngôn ngữ đó.
Cách kiểm tra và xây dựng các mẫu Regex của riêng bạn
Cách tốt nhất để học Regex là thực hành với các ví dụ và sử dụng các công cụ kiểm tra trực tiếp có sẵn trên web.
- biểu thức chính quy101.com: cho phép bạn viết mẫu, kiểm tra kết quả, xem giải thích và số liệu thống kê hiệu suất.
- regexr.com: : các tùy chọn trợ giúp từng bước tuyệt vời, đồ họa trực quan và các ví dụ tương tác.
- Trình giải thích trực quan và trình tạo mã: lý tưởng để hiểu các mẫu phức tạp và tạo ra biểu thức từ đầu.
- Trò chơi và thực hành trực tuyến: Học bằng cách chơi và giải quyết những thử thách thực tế để hiểu rõ cách thức hoạt động của Regex.
Những lỗi thường gặp và mẹo thực tế để thành thạo Regex
Regex rất mạnh mẽ, nhưng cũng có thể gây nhầm lẫn. Những mẹo sau sẽ giúp bạn tránh những cạm bẫy thường gặp:
- Thoát khỏi các siêu nhân vật khi bạn tìm kiếm giá trị theo nghĩa đen của nó. Ví dụ, sử dụng \. cho điểm này, \* cho dấu hoa thị, \? để thẩm vấn.
- Không lạm dụng dấu chấm (.) và ký tự đại diện .*. Chúng rất hữu ích, nhưng có thể trả về kết quả không mong muốn nếu bạn không xác định rõ mẫu của mình.
- Thêm neo (^, $) khi bạn muốn giới hạn mẫu ở đầu hoặc cuối một dòng và tránh những sự trùng khớp cục bộ.
- Sử dụng các lượng từ cụ thể khi tìm kiếm các đoạn lặp lại chính xác, thay vì chỉ dựa vào * hoặc +.
- Luôn thử đưa ra những ví dụ tích cực và tiêu cực. Bằng cách này, bạn có thể phát hiện xem mẫu có bao gồm tất cả các trường hợp cần thiết hay không mà không tạo ra kết quả dương tính giả.
- Phân chia và chinh phục: Nếu bạn có một mẫu rất phức tạp, hãy xây dựng nó thành nhiều phần và kết hợp các phần lại ở cuối.
- Bạn có thể thoải mái tham khảo các tài liệu, tài liệu hướng dẫn và diễn đàn. để xem các ví dụ và mẹo vặt hàng ngày.
Tích hợp Regex vào ngôn ngữ lập trình và công cụ
Regex được tích hợp vào các chức năng phổ biến nhất của tất cả các ngôn ngữ chính. Một số ví dụ:
- jav: Phương pháp kiểm tra(), hành () của đối tượng RegExp và các phương thức trận đấu(), Tìm kiếm(), thay thế (), tách () của Chuỗi.
- con trăn: Các mô-đun re cung cấp các chức năng như Tìm kiếm(), trận đấu(), findall (), phụ (), Vv
- PHP: chức năng preg_match (), preg_thay thế(), preg_split() và những người khác
- .LƯỚI: Lớp học biểu thức chính quy với các phương pháp tiên tiến và sự hỗ trợ của PCRE.
Trong các trình biên tập như VSCode, Sublime, Atom hoặc Notepad++, bạn cũng có thể sử dụng Regex để tìm kiếm và thay thế. Và trên các hệ thống UNIX, các tiện ích như grep, khát y ôi kết hợp công cụ Regex của riêng họ.
Regex trong SEO và quản lý URL
Regex là thành phần quan trọng để tối ưu hóa URL, định tuyến web và quản lý tham số động trên các nền tảng như WordPress, Joomla và thương mại điện tử.
- .htaccess và mod_rewrite: Chúng cho phép bạn chuyển đổi các URL xấu xí, chứa đầy tham số thành các địa chỉ thân thiện với các quy tắc Regex. Theo cách này,
www.ejemplo.com/index.php?p=123có thể được chuyển đổi thànhwww.ejemplo.com/articulo/titulo-amigable, giúp cải thiện cả SEO và trải nghiệm của người dùng. - Lọc tham số: Trích xuất, dọn dẹp hoặc chuyển đổi các tham số trong URL để điều chỉnh kết quả cho phù hợp với các bối cảnh tìm kiếm khác nhau.
Bằng cách sử dụng các quy tắc Regex, quản trị viên web có thể tạo các mẫu viết lại để xác định và sửa đổi các thành phần URL nhằm cải thiện cấu trúc, tối ưu hóa và khả năng hiểu của công cụ tìm kiếm và người dùng.
Biểu thức chính quy nâng cao: Kỹ thuật và tài nguyên
Regex không chỉ cho phép tìm kiếm trực tiếp; nó còn hỗ trợ nhóm có điều kiện, chương trình con, đệ quy, tham chiếu ngược và nhiều hơn nữa. Điều này khiến nó trở thành công cụ thiết yếu cho các tác vụ phức tạp.
- Các chương trình con và tham chiếu ngược: Chúng cho phép bạn tìm ra các mẫu, tính đối xứng, trình tự lặp lại và các xác nhận rất cụ thể.
- Điều kiện: Chạy các tìm kiếm hoặc xác thực khác nhau dựa trên thông tin đã thu thập được trong các nhóm trước đó.
- Đệ quy: Một số công cụ tiên tiến cho phép bạn xác định các mẫu áp dụng cho chính chúng, điều này rất hữu ích khi xử lý dữ liệu có cấu trúc như XML hoặc JSON.
- Các công cụ sửa đổi toàn cục: (/g, /i, /m trong Perl/JavaScript) cho phép tìm kiếm toàn cục, không phân biệt chữ hoa chữ thường hoặc tìm kiếm nhiều dòng.
Tài nguyên thiết yếu để học Regex
Nếu bạn muốn mở rộng kiến thức, những tài nguyên sau đây sẽ hữu ích:
- Wikipedia: Giải thích chi tiết về lý thuyết và kỹ thuật.
- Biểu thức chính quy.info: Tài liệu tham khảo và hướng dẫn cho mọi trình độ.
- Tài liệu tham khảo: Tóm tắt nhanh về tất cả các toán tử, nhóm và quy tắc phổ biến nhất.
- Hướng dẫn tương tác: Thực hành trực tiếp bằng các bài tập và phản hồi ngay lập tức.
- Cộng đồng và diễn đàn: Học hỏi từ những người dùng khác, đặt câu hỏi và chia sẻ mẹo cá nhân của bạn.
Học Regex mang lại lợi thế lớn trong việc quản lý và xử lý văn bản, cho phép tìm kiếm, xác thực, chuyển đổi và tự động hóa hiệu quả hơn. Với sự nhất quán và thực hành, việc viết mẫu biểu thức chính quy sẽ trở nên dễ dàng và tự nhiên hơn. Tận dụng các công cụ trực tuyến và bài tập thực hành, bắt đầu bằng các ví dụ đơn giản và tiến tới các mẫu phức tạp hơn. Khi bạn đã nắm vững các nguyên tắc của nó, Regex sẽ trở thành một sự bổ sung tự nhiên cho kho vũ khí phát triển và quản trị hệ thống của bạn, tạo điều kiện cho các nhiệm vụ trước đây có vẻ phức tạp hoặc tẻ nhạt.