Trang chủLập trìnhRegex là gì? Kiến thức về regex mọi lập trình viên nên biết

Regex là gì? Kiến thức về regex mọi lập trình viên nên biết

Thứ Tư, 5/17/2023, 9:45:59 PMlike 764
Có bao giờ bạn cảm thấy gặp khó khăn khi phải xử lý các chuỗi ký tự, đoạn văn khi lập trình chưa? Bạn phải tốn thời gian để giải quyết các đoạn code lặp đi lặp lại, dài lê thê chỉ để kiểm tra phần Input có hợp lệ hay không. Tuy nhiên, có một mẹo nhỏ cho bạn, đó là dùng Regular Expression. Vậy Regular Expression hay Regex là gì? Dưới đây, Gofiber sẽ giúp bạn giải đáp chi tiết thông qua bài viết dưới đây.

Regex là gì?

Nếu như bạn là một lập trình viên, ắt hẳn khái niệm Regex là gì cũng không còn xa lạ đối với bạn. Ứng dụng hầu hết của Regex là kiểm tra tính hợp lệ của email hay số điện thoại... Vậy Regex được hiểu như thế nào?

Khái niệm Regex

Regex được mô tả lần đầu bởi Stephen Cole Kleene vào năm 1951 thông qua các ký tự toán học. Ông cũng gọi đó là Regular Events - sự kiện thường xuyên. Phải đến vào cuối khoảng thế kỷ 20 thì việc dùng biểu thức Regex mới phổ biến trong khoa học máy tính.

Regex là gì? - Regex được viết tắt từ Regular Expression (biểu thức chính quy). Đây là một chuỗi các ký tự đặc biệt để tạo nên mẫu (pattern). Nhiệm vụ chính của Regex là phân tích cú pháp, tìm kiếm, sự trùng hợp hay thay thế các đoạn/ chuỗi ký tự.

Về cơ bản, Regex không phải là ngôn ngữ lập trình. Nó chỉ đơn giản là bộ cú pháp dùng để xử lý chuỗi. Người lập trình không phải "còng lưng" copy paste hàng tá code. Tất cả những gì bạn cần làm để xử lý "mớ bòng bong" code là sử dụng Regex.

Regex là gì?
Regex là gì?

Các cú pháp về Regular Expression

 Ý nghĩaVí dụExamplex that this will match
^Bắt đầu các chuỗi nhập^BB,nhưng chỉ nêu kí tự đầu tiên trong chuỗi
$Kết thúc của chuỗi nhậpX$X, nhưng chỉ nêu ký tự cuối cùng trong chuỗi
.Bất kỳ ký tự nào ngoại trừ ký tự xuống dòng (\n)i.ationisation, ization
*Ký tự trước có thể được lặp lại 0 hoặc nhiều lầnra*trt, rat, raat, raaat, and so on
+Ký tự trước có thể được lặp lại 1 hoặc nhiều lầnra+trat, raat, raaat, and so on (but not rt)
?Ký tự trước có thể được lặp lại 0 hoặc 1 lầnra?trt and rat only
\sBất kỳ ký tự khoảng trắng\sa[space]a, \ta, \na (\t and \n có ý nghĩa tương tự C#)
\SBất kỳ ký tự nào, miễn không phải là khoảng trắng\SFaF, rF, cF, but not \tf
\bTừ biênion\bany word ending in ion
\BBất kỳ vị trí nào không phải là từ biên\BX\BBất kỳ ký tự X ở giữa của 1 từ

Tham khảo: Mastercode

Dấu "^" là bắt đầu chuỗi và "$" là kết thúc chuỗi
Dấu "^" là bắt đầu chuỗi và "$" là kết thúc chuỗi

Regex được dùng để làm gì?

Vậy ứng dụng của Regex là gì? Biểu thức này có thực sự cần thiết cho lập trình viên không? Hãy cùng tìm hiểu tiếp nhé!

  • Kiểm tra tính hợp lệ và so khớp bất kỳ thứ gì miễn là có quy tắc rõ ràng: kiểm tra tính hợp lệ của email, so khớp các ký tự trong cùng chuỗi từ a đến z, so khớp và tiến hành kiểm tra URL có phù hợp hay không, kiểm tra tính hợp lệ của số điện thoại...
  • Tìm kiếm và thay thế: trong các phần mềm lập trình không có kết hợp Regex, ắt hẳn bạn sẽ chẳng thể sử dụng Ctrl + H để tìm kiếm. Nhưng kho có Regex, nó sẽ hỗ trợ bạn tìm ký tự.
    Những công dụng của Regex trong lập trình
    Những công dụng của Regex trong lập trình

» Xem thêmNeural network là gì? Tổng quan về neural network có thể bạn cần biết

Các khái niệm cơ bản về Regex

Biểu thức quy chung thường để chỉnh định một xâu các xâu cần trong một mục đích cụ thể. Tuy nhiên, chúng ta thường có nhiều cách ngắn gọn hơn để chỉ định bộ xâu mà mình muốn. Một số khái niệm cơ bản khác về Regex là gì?

“Or”

"Or" là một thanh chiều dọc ngăn cách các lựa chọn được thay thế. Ví dụ: gray|grey (có thể khớp với cả "gray" hoặc "grey").

Phân nhóm

Một dấu ngoặc đơn được sử dụng nhằm để xác định phạm vi và mức độ ưu tiên của các toán tử. Ví dụ như: gray|grey và gr(a|e)y là hai mẫu tương đương nhau. Nó đều đang mô tả tập hợp "gray" hoặc "grey".

Định lượng

Trong bộ định lượng sau mã thống báo (ký tự) hay nhóm chỉ định về tần suất khi phần tử trước có khả năng xảy ra thì các định lượng phổ biến nhất là các ký tự "?, *, +":

  • Dấu hỏi "?": chỉ ra 0 hoặc 1 lần xuất hiện của phần tử trước.
  • Dấu hoa thị "*": cho biết không có hoặc nhiều lần xuất hiện của phần tử ở trước.
  • Dấu cộng "+": cho biết 1 hoặc nhiều lần xuất hiện của phần tử ở trước.
    Biểu thức Regex
    Biểu thức Regex

Ngoài ra, còn có:

  • {n}: mục trước khớp chính xác n lần.
  • {min,}: mục trước khớp mức tối thiểu hay nhiều lần hơn.
  • {min,max}: mục trước khớp ít nhất số lần tối thiểu nhưng không được quá số lần tối đa.

Ký tự đại diện

Những ký tự đại diện "." sẽ phù hợp với mọi ký tự. Chẳng hạn như "a.b" sẽ khớp với bất kỳ xâu vào có chứa "a". Sau đó, mọi ký tự nào khác, sau nữa là "b". "a.*b" sẽ khớp với bất kỳ xâu nào chứa "a" và "b" ở điểm duy nhất nào sau đó.

Những cấu trúc từ ký tự đại diện có thể kết hợp thành biểu thức phức tạp tùy theo ý lập trình viên. Tương tự như chúng ta có thể tạo các biểu thức tính toán từ các số và phép toán +, -, x và :. Ví dụ như H(ae?|ä)ndel H(a|ae|ä)ndel đều là mẫu hợp lệ với các xâu trước đó.

Các lý thuyết về ngôn ngữ chính quy Regex trong Java

Những biểu thức chính quy mô tả ngôn ngữ trong lý thuyết về ngôn ngữ chính quy. Những lý thuyết này bao gồm:

ĐỊnh nghĩa chính thức

Biểu thức chính quy Regex sẽ bao gồm các hằng số, chúng biểu thị tập hợp của chuỗi và ký tự toán tử và biểu thị phép toán trên các tập hợp này. Các hằng số sau đây được định nghĩa là các biểu thức chính quy:

  • (tập rỗng) ∅ là tập ∅.
  • (chuỗi trống) ε biểu thị tập hợp chỉ chứa chuỗi "rỗng", không có ký tự khác.
  • (ký tự chữ) a trong Σ biểu thị tập hợp chỉ chứa ký tự a.

Với những biểu thức chính quy R và S. Các thao tác sau được định nghĩa để tạo biểu thức chính quy:

  • (Nối) (RS) là biểu thị tập hợp chuỗi thu được bằng cách nối 1 chuỗi được R chấp nhận. Một chuỗi được S chấp nhận (theo thứ tự). Ví dụ: Đặt R biểu thị {"ab", "c"} và S biểu thị cho {"đ", "ef"}. Sau đó, (RS) biểu thị cho {"abd", "abef", "cd", "cef"}.
  • (Luân phiên) (R|S) biểu thị cho tập hợp của các tập hợp được mô tả bởi S và R. Ví dụ: R mô tả {"ab", "c"} và S mô tả {"ab", "d", "ef"}, thì biểu thức mô tả (R|S) { "ab", "c", "d", "ef"}.
  • (Kleene star) biểu thị siêu tập hợp (R*) nhỏ nhất trong tập hợp được mô tả bởi R có chứa ε và được đóng dưới dạng nối chuỗi.

Để tránh dấu (), người ta cho rằng Kleene star có mức độ ưu tiên nhất. Tiếp đó sẽ là ghép nối > xen kẽ. Ví dụ: (ab)c có thể được viết là abc, và a|(b(c)) có thể được viết là a|bc.

Regex
Định nghĩa chính thức về Regex

Quyết định tính tương đương của Regex là gì?

Có rất nhiều cách để xây dựng biểu thức chính quy để cùng đạt được một kết quả. Lập trình viên có thể viết một thuật toán, đối với 2 Regex đã cho, quyết định xem các ngôn ngữ cùng miêu tả có bằng nhau không. Thuật toán sẽ phải rút gọn biểu thức thành máy trạng thái hữu hạn xác định tối thiểu và xác định xem thuật toán có tương đương nhau hay không.

Lập trình viên cũng có thể thu được các định luật đại số cho biểu thức Regex bằng cách sử dụng phương pháp của Gischer. Phương pháp này được ví dụ như sau: Để kiểm tra (X + Y) * và (X * Y *) có biểu thị cùng ngôn ngữ chính quy hay không, hãy cho tất cả biểu thức chính quy X, Y cần và đủ để kiểm tra Regex cụ thể (a+b) và (a*b) biểu thị cùng ngôn ngữ trên Σ={a, b}. Về tổng quát hơn, phương trình E = F giữa các thuật ngữ Regex với các biến đúng khi và chỉ khi. Sự tạo thành của nó với các biểu thức khác được thay thế bằng những ký hiệu khác nhau.

Thuật toán Regex
Thuật toán Regex

» Xem thêm: JavaScript: Ngôn ngữ linh hoạt đánh thức sức mạnh phát triển web

Khả năng biểu hiện và tính cô đọng

Regex tối thiểu phải thể hiện tính mục đích và tránh xác định ? và +. Những điều này có thể được diễn đạt như sau:a+= aa và a?= (a|ε). Đôi lúc toán tử phần bù thêm và đưa ra một biểu thức chính quy tổng quát mà ở đây là R khớp với tất cả các chuỗi trên Σ.

Về nguyên tắc, toán tử bổ sung thì tính là dư thừa vì nó không cấp thêm bất kỳ khả năng biểu đạt nào. Tuy nhiên, nó lại làm cho một biểu thức có tính ngắn gọn hơn nhiều. So với việc loại bỏ một toán tử phần bù duy nhất có thể gây tình trạng tăng gấp đôi độ dài theo hàm mũ.

Các biểu thức chính quy có thể biểu thị các ngôn ngữ chính quy. Chính xác đó là lớp ngôn ngữ được chấp nhận bởi automata. Tuy nhiên, có sự khác biệt về độ nhỏ gọn đáng kể. Một số lớp ngôn ngữ bình thường chỉ được mô tả bằng automata hữu hạn xác định có kích thước theo cấp số nhân.

Khả năng biểu hiện và tính cô đọng của Regex là gì
Khả năng biểu hiện và tính cô đọng của Regex là gì

Bất kỳ lập trình viên nào khi hiểu rõ về Regex là gì sẽ giúp công việc lập trình được loại bỏ những tác vụ phức tạp. Những thông tin trên đây từ Gofiber chỉ là một phần nhỏ trong hàng tá kiến thức về lập trình. Vì thế, hãy luôn học hỏi thêm kiến thức để không bị lạc hậu về lập trình nhé!

Việc thiết kế một trang web bán hàng mang lại nhiều lợi ích cho trải nghiệm mua hàng của khách hàng. Một trang web tốt sẽ cung cấp thông tin chi tiết về sản phẩm, hình ảnh hấp dẫn, chức năng tìm kiếm sản phẩm, giỏ hàng và quy trình thanh toán đơn giản, thuận tiện và an toàn. Tìm hiểu về dịch vụ thiết kế website chuyên nghiệp của Gofiber.

5/5 - (0 bình chọn)

Xin chào! Tôi là Bảo Duyên, một tác giả sáng tạo nội dung chất lượng và là thành viên đội ngũ tại Gofiber. Tôi có sự đam mê và thế mạnh trong việc viết về các chủ đề như công nghệ, SEO và marketing. Với khả năng sáng tạo, tôi luôn tìm cách đưa ra các ý tưởng mới mẻ và độc đáo trong việc viết nội dung. Tôi đảm bảo rằng mỗi bài viết của mình được trình bày một cách chuyên nghiệp, thông tin và hấp dẫn. Tôi nỗ lực để mang đến cho độc giả những thông tin hữu ích và giải pháp thực tế để giúp họ tiến bộ và thành công trong lĩnh vực công nghệ, SEO và marketing. Với kiến thức và kinh nghiệm trong lĩnh vực này, tôi luôn cập nhật các xu hướng mới nhất và áp dụng những kỹ thuật tiên tiến để tối ưu hóa nội dung. Tôi hiểu rõ về cách xây dựng chiến lược marketing hiệu quả, cách tăng cường hiệu suất trang web và cách thu hút đối tượng khách hàng mục tiêu. Là một tác giả tại Gofiber, tôi cam kết mang đến nội dung chất lượng và giá trị cho độc giả. Tôi tập trung vào việc tạo ra các bài viết sáng tạo và tối ưu hóa để giúp doanh nghiệp và cá nhân nâng cao hiệu quả tiếp cận và tăng cường thương hiệu của họ trên mạng. Nếu bạn đang tìm kiếm nội dung chất lượng với các chủ đề về công nghệ, SEO và marketing, hãy đồng hành cùng tôi trên Gofiber. Tôi rất mong được gặp gỡ và làm việc cùng bạn để mang lại thành công và tăng cường sự hiện diện trực tuyến cho bạn. Cảm ơn bạn đã đọc bio giới thiệu của tôi. Nếu bạn có bất kỳ yêu cầu hoặc câu hỏi nào, xin hãy liên hệ với tôi. Tôi rất sẵn lòng hỗ trợ và cùng bạn xây dựng nội dung tuyệt vời.


CÓ THỂ BẠN QUAN TÂM

Xem nhiều nhất

thuê VPS giá rẻ