Tìm hiểu về Regular Expression

by tuanit2304
566 views 5 read

Tìm hiểu về Regular Expression

Mở đầu

RegEx là một khái niệm chúng ta thường xuyên gặp qua. Các master thì sẽ chẳng lạ lùng gì, còn với newbie thì cực kỳ khó hiểu và tiếp cận.

Bài viết này mình sẽ giới thiệu qua về RegEx. Khi thành thạo được công cụ này, chắc chắn cuộc sống của lập trình viên sẽ "tươi đẹp" hơn rất nhiều.

RegEx là gì ?

RegEx (Regular Expression) trong tiếng Việt được gọi là Biểu thức chính quy. Regex không phải là một ngôn ngữ lập trình, nó chỉ là một bộ cú pháp dùng để bắt chuỗi. Regex là các ký tự được kết hợp với nhau theo quy tắc để tạo nên một trình tự giúp chúng ta tìm kiếm và thay thế văn bản một cách thông minh, nhanh chóng, đơn giản và thuận tiện. Nó có thể dùng được trong hầu hết các ngôn ngữ lập trình bậc cao như Java, C#, Python, JS, PHP,…

Ứng dụng của Regular Expression

  • Ứng dụng trong kiểm tra tính hợp lệ
    • Kiểm tra email có hợp lệ hay không
    • Kiểm tra số điện thoại ở Việt Nam
    • Kiểm tra URL hợp lệ
    • Kiểm tra độ dài của câu có nằm trong khoảng (a,b) hay không
    • Bất cứ cái gì có quy tắc bạn đều có thể kiểm tra với Regex
  • Ứng dụng trong tìm kiếm và thay thế

Cú pháp của biểu thức chính quy

Chuỗi so khớp cơ bản

Chuỗi Ý nghĩa
. Khớp bất kỳ ký tự nào
\d Khớp với số bất kỳ từ 0 – 9
\D Phủ định của \d
\w Khớp với các chữ cái tiếng anh, chữ số và dấu _
\W Phủ định của \w
<dấu cách> Khớp với dấu cách(SPACE trên bàn phím)
\t Khớp với dấu tab
\n Khớp với new line(xuống hàng)
\s Khớp với dấu trắng bất kỳ(dấu cách, \t,\n)
\S Phủ định của \s

Kết hợp các chuỗi so khớp

Bạn có thể kết hợp các chuỗi so khớp lại với nhau bằng cách đưa chúng vào trong cặp ngoặc vuông. Ví dụ :

  • [abc] -> Khớp các ký tự hoặc là a, hoặc là b, hoặc là c
  • [a-fA-Z] -> a-f là tất cả các ký tự từ a đến f trong bảng chữ cái tiếng anh đó, A-Z tương tự là từ A hoa đến Z hoa. Vậy là regex này khớp với mọi ký tự trong bảng chữ cái tiếng anh bất kể hoa thường.
  • [\d,] -> Khớp với ký tự số hoặc dấu ,

Các ký tự ranh giới

Ký tự Ý nghĩa Demo
\b Xác định ranh giới của từ demo
\B Phủ định của \b demo
^ Xác định vị trí bắt đầu dòng demo
$ Xác định vị trí kết thúc dòng demo

Sử|+ dụng hoặc trong regex

(0|84|+84) : Hoặc 0, hoặc 84, hoặc +84 – demo

Các ký tự định lượng

Loại định lượng Ý nghĩa Demo
X* So khớp lặp lại regex X 0 hoặc vô số lần demo
X+ So khớp lặp lại regex X 1 hoặc vô số lần demo
X? So khớp lặp lại regex X 0 hoặc 1 lần demo
X{m} So khớp lặp lại regex X chính xác m lần demo
X{m,} So khớp lặp lại regex X m hoặc nhiều hơn m lần demo
X{m,n} So khớp lặp lại regex X với số lần từ m tới n(bao gồm cả m và n) demo

Và một số ví dụ sau:

  • ab+ : khớp các chuỗi ab, abb, abbaabab,…
  • (ab)+ : khớp các chuỗi ab, abab, ababab,…

Các ký tự đặc biệt

Các ký tự {}[]()^$.|*+?\ và dấu - ở trong cặp ngoặc vuông là các ký tự đặc biệt. Nếu bạn muốn dùng nó để so khớp thì cần thêm dấu \ vào đằng trước:

Ví dụ: \. sẽ khớp với dấu chấm .\\ sẽ khớp với ký tự \.

Một số RegEx được dùng phổ biến

So khớp email

  • ^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$
  • ^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$
  • ^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|((a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$
  • ^\w+[\w-\.]*\@\w+((-\w+)|(\w*))\.[a-z]{2,3}$
  • ^.+@.+$

So khớp URL

  • ^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
  • ((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)
  • (http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?
  • ^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\’/\\\+&amp;%\$#\=~])*$

So khớp SĐT ở Việt Nam

  • \+?(0|84)\d{9}

So khớp số nguyên

  • \b\d+\b
  • \b(?:\d{3}\.)+\d{3}\bdemo

So khớp mã HTML

So khớp tên riêng

  • (?:[A-Z]\p{L}+ ){1,3}[A-Z]\p{L}+demo

Một số liên kết hữu ích

  1. Test RegEx online: https://regex101.com/
  2. RegEx cheetsheet: http://web.mit.edu/hackl/www/lab/turkshop/slides/regex-cheatsheet.pdf
  3. Thư viện regex: http://regexlib.com/

Kết bài

Trên đây là một số kiến thức "nhập môn" về RegEx. Hi vọng bài viết nhỏ này đã giúp bạn học được cú pháp viết RegEx và áp dụng vào công việc thường ngày.

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.