11 Regex - Biểu thức chính quy xử lý hàng triệu dữ liệu

Regex là một công cụ mạnh mẽ để xử lý và hỗ trợ người dùng chọn lọc dữ liệu thông qua các lệnh điều kiện. Nó được mệnh danh là công cụ xử lý chuỗi mạnh mẽ trong Php và JavaScript, đồng thời được Google Analytics hỗ trợ trong chế độ xem data. Cùng tìm hiểu Regex mạnh mẽ như thế nào và cách áp dụng nó như thế nào nha.

Biểu thức chính quy là gì?

Regex hay trong thuật ngữ tiếng Việt được gọi là biểu thức chính quy. Tùy cách thức bạn sử dụng mà nó có thể được hiểu theo nhiều kiểu, tuy nhiên vẫn chung một mục đích là dùng để lọc dữ liệu, cụ thể:

Regex là gì trong trình xử lý dữ liệu hàng loạt

Hiểu về Regex khi sử dụng Analytics

Biểu thức chính quy được xem là công cụ đắc lực mà Analytics hỗ trợ cho người dùng sử dụng để định nghĩa linh hoạt các chế độ xem và lọc dữ liệu, bao gồm: mục tiêu, phân loại, đối tượng, nhóm nội dung, kênh.

Đến đây bạn có thể hiểu được Regex là biểu thức chính quy phục vụ cho việc lọc dữ liệu theo tiêu chí mà người dùng đưa ra. Vậy nó có liên quan gì đến lập trình hay không? Cùng tiếp tục tìm hiểu về biểu thức chính quy ở phần tiếp theo.

Định nghĩa về biểu thức chính quy khi sử dụng trong lập trình

Biểu thức chính quy cơ bản chính là mẫu (pattern) thay các chuỗi ký tự cụ thể mà lập trình viên dùng để đối sánh rộng hoặc đối sánh hẹp để so khớp và nhận được kết quả đúng tiêu chí đã đề ra trước đó. Nó là viết tắt của Regular Expression hay còn được gọi là biểu thức chính quy.

Phân biệt các siêu ký tự trong biểu thức chính quy

Siêu ký tự Regex được sử dụng trong việc lập một biểu thức chính quy, nó bao gồm 3 nhóm ký tự sau:

Ký tự đại diện

Đại diện bao gồm (.) so khớp mọi ký tự đơn bao gồm chữ cái, số hoặc ký hiệu, (?) so khớp ký tự trước đó 0 hoặc 1 lần, (+) so khớp với ký tự trước đó 1 hoặc nhiều lần, (*) so khớp với ký tự trước đó 0 hoặc nhiều lần và (|) dùng để tạo kiểu khớp OR, lưu ý (|) không sử dụng ở cuối một biểu thức. 

Ký tự cố định

Bộ cố định chỉ gồm 2 loại là (^), ($) lần lượt ứng dụng trong việc so khớp các ký tự liền kề ở đầu chuỗi và khớp với các ký tự liền kề ở cuối chuỗi.

Ký tự nhóm

Loại này có 3 ký tự chính, cụ thể:

– “( )”: So khớp với các ký tự trong ngoặc theo thức tự chính xác ở mọi vị trí trong chuỗi và có chức năng dùng để nhóm biểu thức khác.

– “[ ]”: Được dùng để so khớp với các ký tự trong ngoặc theo mọi thứ tự ở vị trí bất kỳ trong chuỗi.

– “-”: dùng để tạo chuỗi ký tự hàng loạt trong dấu ngoặc vuông để so khớp với mọi vị trí.

Ký tự thoát

Chức năng của loại ký tự này rất đơn giản, nó hỗ trợ lập trình viên đơn giản hóa thao tác khi tạo biểu thức chính quy và dùng để thoát chế độ khi cần các ký tự được đọc theo nghĩa đen, được biểu thị là (\).

Ngoài ra, nếu bạn thêm một dấu “.” vào phía sau (\) thì nó biểu thị là dấu chấm hoặc dấu thập phân chứ không phải là ký tự đại diện.

Ứng dụng trong lập trình và xử lý dữ liệu

Như đã nói, biểu thức chính quy là công cụ mạnh mẽ trong việc thiết lập chế độ xem dữ liệu và xử lý chuỗi trong Php và JavaScript, vì vậy nó có những công cụ ưu việt phục vụ cho lập trình trong JS hay các loại ngôn ngữ khác. Vậy để ứng dụng tốt biểu thức chính quy, bạn cần nắm vững những điều sau đây.

Ứng dụng của Regex trong xử lý dữ liệu

Hàm xử lý Regular Expression là gì

Trong PHP, có một hàm để xử lý Regular Expression mà bạn cần phải biết, chính là Preg_match với cú pháp: <<preg_match($pattern, $subject, $matches)>>.

Trong đó, Pattern là đại diện cho chuỗi Regex với các mẫu sẵn, subject là đối tượng bạn cần so khớp với tiêu chí mẫu và matches là danh sách kết quả nhận được qua quá trình so khớp.

Lập trình viên thường sử dụng Preg_match để kiểm tra một chuỗi thuộc các định dạng như số, ký tự thường hoặc ký tự hoa.

Sau khi đã hiểu về hàm xử lý biểu thức chính quy chuyên dùng, cùng đến với cách để tạo một Regex đúng cách trong JS.

Cách xây dựng một biểu thức chính quy

Trong ngôn ngữ JS, biểu thức chính quy là đại diện một chuỗi nhưng lại không được bao bọc bởi dấu (‘) hay (“) mà lại được thay thế bằng (/).

Cụ thể, để xây dựng biểu thức chính quy, bạn có thể sử dụng 1 trong 2 cách sau:

  • Dùng cú pháp có chứa Pattern và flags: new regex Const = new RegExp( ‘ abc ‘)
  • Dùng cú pháp chứa dấu (/): /pattern/flags

Ở cách thứ 2, bạn cần lưu ý chuỗi biểu thức chính quy chính là Pattern và flags là thông số cấu hình cho chuỗi với giá trị <igm> mang ý nghĩa so khớp không phân biệt chữ hoa, chữ thường và dùng để tìm toàn bộ tài liệu liên quan.

Về cách viết chi tiết, bạn cần học và nắm chắc trong lòng bàn tay tổ hợp siêu ký tự Regex như đã nhắc ở bên trên để có thể viết ra các lệnh so khớp chuỗi, tách chuỗi, tìm kiếm trong chuỗi hoặc thay thế,… Các biểu thức chính quy cung cấp quá trình biên dịch khi tập lệnh được tải lên trong JS, nó mang tính hỗ trợ thay đổi hiệu suất khi các biểu thức chính quy không đổi.

Sử biểu thức chính quy đúng cách trong JS

Các biểu thức chính quy được sử dụng bằng các phương thức test(), exec(), match(), replace(), search() và split(). Cụ thể:

  • xec(): hữu dụng trong tìm kiếm đối sánh trong một chuỗi và nó sẽ trả về mảng thông tin hoặc <null>.
  • test(): dùng để kiểm tra sự phù hợp trong một chuỗi, kết quả trả về là <true> hoặc <false>.
  • match(): trả về mảng chứa tất cả các kết quả khớp, gồm Capturing Group hoặc <null> nếu không tìm thấy kết quả.
  • matchAll(): trả về một trình vòng lặp chứa tất cả kết quả phù hợp bao gồm Capturing Group.
  • search(): tương tự test() nhưng nó chỉ trả về chỉ mục của kết quả khớp hoặc (-1) nếu tìm kiếm thất bại.
  • replace(): dùng để tìm một chuỗi khớp con trong chuỗi khớp lớn và thay chuỗi con bằng một chuỗi khác.
  • split(): dùng một biểu thức chính quy hoặc chuỗi cố định để ngắt một mảng hoặc một chuỗi mục tiêu thành các chuỗi con.

Vậy nên lựa chọn phương pháp gì vào thời điểm nào là hợp lý? Cần nhớ rằng, nếu bạn muốn biết một Pattern có được tìm thấy trong một chuỗi hay không, hãy sử dụng test() hoặc search(); để biết thêm thông tin với tốc độ thấp thì dùng exec() hoặc match(). 

Tìm kiếm nâng cao với Flags

Regular Expression có thông số cấu hình Flags cho phép thực hiện việc tìm kiếm tổng thể và tìm kiếm không phân biệt chữ hoa, chữ thường. Các flags này mang giá trị <igm> và có thể được sử dụng riêng biệt hoặc kết hợp theo bất kỳ thứ tự nào.

Phân biệt ký hiệu các Flags, bao gồm cả <i>, <g>, <m> như sau:

  • has Indices <d>: dùng để tạo chỉ số cho chuỗi con phù hợp.
  • global <g>: dùng để tìm kiếm toàn bộ tài liệu.
  • ignoreCase <i>: tìm kiếm không biệt chữ thường hay chữ hoa.
  • multiline <m>: cho phép (^) và ($) khớp với các ký tự mới
  • dotAll <s>: cho phép (.) khớp với các ký tự dòng mới.
  • unicode <u>: cho phép xem một pattern là một chuỗi các điểm mã Unicode.
  • sticky <y>: thực hiện tìm kiếm “dính” khớp bắt đầu từ vị trí hiện tại trong chuỗi input.

Mẹo để giữ biểu thức chính quy trở nên tối giản trong lập trình

Một số “tips” để sử dụng biểu thức chính quy tối giản
Một số “tips” để sử dụng biểu thức chính quy tối giản

Tương tự các ngôn ngữ lập trình khác, luôn có những phương pháp để trở nên tối giản hóa trong lập trình. Bật mí cho bạn một số “mẹo” để giữ biểu thức chính quy không trở nên rối ren và dễ sử dụng:

  • Dùng siêu ký tự (\) để có thể thoát chế độ khi cần các ký tự được đọc hiểu theo nghĩa đen.
  • Bạn đừng nhầm lẫn rằng biểu thức chính quy lúc nào cũng cần Regex. Đúng như vậy, biểu thức chính quy không cần bao gồm siêu ký tự Regex. Bởi nó sẽ khớp với rất nhiều dữ liệu.

Nếu không chỉ định cho siêu ký tự biết rằng nên hoặc không nên so khớp dữ liệu nào thì các biểu thức sẽ so khớp nội dung chỉ định với bất cứ ký tự nào.

Qua bài viết này, hy vọng bạn phần nào nắm được định nghĩa Regex là gì và siêu ký tự này cũng như một số “mẹo” hay ho để có thể áp dụng trong công cuộc lập trình của bạn một cách dễ dàng. Ngoài ra, đừng quên theo dõi chúng tôi để có thể nắm bắt thêm những thông tin liên quan đến lập trình nhé.

FPT Aptech trực thuộc Tổ chức Giáo dục FPT có hơn 25 năm kinh nghiệm đào tạo lập trình viên quốc tế tại Việt Nam, và luôn là sự lựa chọn ưu tiên của các sinh viên và nhà tuyển dụng.
0981578920
icons8-exercise-96