Biểu thức chính quy (Regular Expression)

Về định nghĩa, khái niệm hay bất cứ thứ gì cơ bản về biểu thức chính quy (Regular Expression hay còn được gọi tắt là Regex) thì tôi xin phép không bàn ở đây vì nó được nói đến rất nhiều. Ở đây tôi chỉ xin chia sẻ việc dùng hay không thôi. Nếu có bạn nào đó hỏi tôi rằng có nên dùng Regex hay không khi code? Câu trả lời của tôi là nên và rất nên. Nó đặc biệt tốt với 1 chuỗi hoặc văn bản lớn. Regex luôn xuất hiện trong đầu tôi trước khi các giải pháp khác được xuất hiện. Và thực sự tôi khuyên là bạn nên sử dụng ngay khi có thể, hãy tìm hiểu xem ngôn ngữ bạn đang làm hỗ trợ Regex đến đâu. Tại sao? Hãy cùng tôi thử nghiệm 1 ví dụ nhỏ thôi nhé. Giả sử bạn muốn lấy từ đằng sau @ và trước dấu chấm, ở đây là từ “gmail”:

[email protected]

Chắc chắn có nhiều bạn sẽ làm như sau: cắt chuỗi theo dấu @, lặp sau đó tiếp tục cắt theo dấu chấm để thu được kết quả. Với input ở trên thì cách này cũng ok thôi. Vậy thử với input thứ 2:

[email protected];[email protected]

Kết quả bạn cần lấy là “gmail” và “sachdidong”, bạn sẽ làm như thế nào? Với cách tư duy thông thường như cắt chuỗi ở trên, bạn sẽ cần đến 3 lần lặp và 3 lần cắt khác nhau. Tôi đã từng rất nhiều lần chứng kiến đồng nghiệp của tôi phải rất vất vả với 1 đống code lặp, cắt chỉ để lấy ra 1 chuỗi trong văn bản, trong khi với Regex chỉ cần 2-3 dòng code là đủ. Và đây là giải pháp của tôi cho bài toán trên, đoạn code tôi thử trên C# nhé:

 line="1">var lstWord = Regex.Matches("[email protected];[email protected]", @"(?<[email protected]).*?(?=\.)").Cast().Select(m => m.Value);
MessageBox.Show(string.Join(",", lstWord.ToArray()), "Result");

Và đây là kết quả:

Ưu điểm:

  1. Thực thi với hiệu suất cao trên dữ liệu phức tạp
  2. Code rất ngắn gọn và linh hoạt
  3. Hỗ trợ cho nhiều ngôn ngữ lập trình khác nhau

Nhược điểm:

  1. Khó học nhưng nếu bạn đầu tư thời gian vào nó 1 chút, bạn sẽ tối ưu được một khối lượng code khổng lồ 🙂

Chú ý: mỗi ngôn ngữ sẽ có phạm vi hỗ trợ và khác nhau 1 chút về biểu thức, tuy nhiên khác nhau không nhiều. Nếu 1 lúc nào đó bạn thử biểu thức của bạn trên C# mà nuột nà nhưng khi thử trên Java thì sai tóe loe thì hãy kiểm tra lại nhé ^^

Các bài viết liên quan khác:

  1. RegEx Tester
  2. Teach Yourself Regular Expressions In 10 Minutes

2 thoughts on “Biểu thức chính quy (Regular Expression)

Leave a Reply

Your email address will not be published. Required fields are marked *