PHP
PHP

Trang chủ

Tổng hợp về Regular Expression trong PHP

PHP, viết tắt của Hypertext Preprocessor, là ngôn ngữ lập trình script phía máy chủ được thiết kế đặc biệt cho phát triển web. Điểm nổi bật của PHP so với các ngôn ngữ khác là khả năng tương thích với nhiều loại cơ sở dữ liệu và chạy mượt mà trên các máy chủ web. Tại Vietnix, chúng tôi không chỉ giới thiệu những khái niệm cơ bản về PHP mà còn cung cấp các ví dụ thực tế giúp bạn dễ dàng hiểu và áp dụng PHP vào việc phát triển website. Bên cạnh đó, Vietnix cũng thường xuyên cập nhật các bài viết mới về tính năng, mẹo và thủ thuật lập trình, giúp bạn giải quyết các thách thức phức tạp, từ đó không ngừng nâng cao và hoàn thiện kỹ năng lập trình của mình.
html
CSS
javascript
sql
python
php
c
c++
bootstrap
react
mysql
reactjs
vuejs
Javascript Tutorials
19/06/2024
14 phút đọc
Theo dõi Vietnix trên

Tổng hợp về Regular Expression trong PHP

Regular Expression trong PHP là một công cụ mạnh mẽ và linh hoạt cho phép lập trình viên thực hiện các thao tác xử lý chuỗi một cách hiệu quả. Được sử dụng rộng rãi trong việc tìm kiếm, thay thế và xác thực dữ liệu, Regular Expression (biểu thức chính quy) giúp tiết kiệm thời gian và nâng cao hiệu suất của các ứng dụng PHP. Trong bài viết này, chúng ta sẽ cùng tìm hiểu các khái niệm cơ bản, cú pháp và các ví dụ thực tiễn để hiểu rõ hơn về cách sử dụng Regular Expression trong PHP.

Regular Expression trong PHP là gì?

Regular expression, còn được biết đến với cái tên biểu thức chính quy và thường được gọi là regex (regexes), là một dãy ký tự mô tả tìm kiếm đặc biệt dưới chuỗi văn bản. Về cơ bản chúng sẽ dùng các thuật toán của ngôn ngữ lập trình để đối chiếu một số thông tin mẫu input đã xác định để thực thi các tác vụ liên quan.

Regular Expressions trong PHP
Biểu thức chính quy trong PHP

Đôi khi có thể xem regex là một ngôn ngữ lập trình thu nhỏ có các kí hiệu mẫu cho phép người dùng phân tích cú pháp chuỗi text. Trình tự, quy luật chính xác của các ký tự không đoán trước được, do đó các regex sẽ tìm nạp các chuỗi cần thiết theo mẫu đã xác định.

Regular Expression trong PHP

Regex là cách nhỏ gọn để mô tả một mẫu chuỗi (string pattern) khớp với một lượng text cụ thể. Như bạn đã biết, PHP là một ngôn ngữ lập trình mã nguồn mở thường được sử dụng để tạo trang web, nó cung cấp các hàm biểu thức chính quy như một công cụ quan trọng. Giống như PHP, nhiều ngôn ngữ lập trình khác có cách triển khai biểu thức chính quy của riêng chúng.

Điều này cũng tương tự với các ứng dụng khác, những ứng dụng này có hỗ trợ biểu thức chính quy riêng có nhiều cú pháp khác nhau. Nhiều ngôn ngữ và công cụ hiện đại có sẵn áp dụng biểu thức chính quy trên các tệp và chuỗi rất lớn.

Mọi người cũng xem:

Lợi ích khi sử dụng Regular expression

Trong nhiều tình huống, các nhà phát triển phải đối mặt với các vấn đề bất cứ lúc nào mà dữ liệu được thu thập trong các free text field do hầu hết các chương trình đều xử lý mục nhập dữ liệu.

Các regex được sử dụng hầu hết mọi nơi trong lập trình ứng dụng ngày nay.

  • Giúp xác thực các chuỗi văn bản mà lập trình viên quan tâm.
  • Cung cấp công cụ để phân tích, tìm kiếm pattern và sửa đổi dữ liệu văn bản.
  • Giúp tìm kiếm mẫu chuỗi cụ thể và trích xuất kết quả phù hợp một cách linh hoạt.
  • Giúp phân tích các file văn bản tìm kiếm một chuỗi ký tự xác định để phân tích thêm hoặc thao tác dữ liệu.
  • Nhờ các hàm regex tích hợp sẵn, các giải pháp dễ dàng và đơn giản giúp xác định các pattern hiệu quả hơn.
  • Tiết kiệm rất nhiều thời gian phát triển, đó là tìm kiếm mẫu chuỗi cụ thể
  • Xác thực thông tin quan trọng của người dùng như địa chỉ email, số điện thoại và địa chỉ IP.
  • Làm nổi bật các từ khóa đặc biệt trong một file dựa trên kết quả tìm kiếm hoặc input.
  • Xác định các thẻ mẫu (template tag) cụ thể và thay thế những dữ liệu đó bằng dữ liệu thực tế theo yêu cầu.
  • Tạo các tag nhận dạng hệ thống mẫu HTML.
  • Được sử dụng để phát hiện trình duyệt, lọc thư rác, kiểm tra độ mạnh của mật khẩu và xác thực biểu mẫu.

Bảng đối chiếu các regex trong PHP

Regular ExpressionĐối chiếu tương ứng
vietnixChuỗi “vietnix”
^vietnixChuỗi bắt đầu với “vietnix”
vietnix$Chuỗi có từ “vietnix”  ở cuối.
^vietnix$Chuỗi mà “vietnix” đứng một mình trên một chuỗi
[abc]a, b, or c
[a-z]Chữ thường
[^A-Z]Bất kỳ chữ cái nào KHÔNG phải là chữ in hoa
(gif|png)Chỉ “gif” hoặc “png”
[a-z]+Một hoặc nhiều chữ thường
^[a-zA-Z0-9]{1, }$Bất kỳ từ nào có ít nhất một số hoặc một chữ cái
([ax])([by])ab, ay, xb, xy
[^A-Za-z0-9]Bất kỳ ký hiệu nào không phải chữ hoặc số
([A-Z]{3}|[0-9]{5})Trung khớp 3 chữ cái hoặc 5 chữ số

Lưu ý: Có thể tạo các mẫu tìm kiếm (search pattern) phức tạp bằng cách áp dụng một số quy tắc biểu thức chính quy cơ bản. Thậm chí nhiều toán tử số học như +, ^, – được sử dụng bởi các biểu thức chính quy (Regular Expression) để tạo các mẫu phức tạp nhỏ.

Các operators về Regular Expression

OperatorMô tả
^Bắt đầu chuỗi
$Kết thúc chuỗi
.Biểu thị hầu hết ký tự đơn lẻ
()Biểu thị một nhóm biểu thức
[]Tìm một khoảng các ký tự ([xyz] nghĩa là gồm x,y,z)
[^]Tìm các ký tự không thuộc trong khoảng đó
– (dash)Tìm phạm vi ký tự trong khoảng cho trước
| (pipe)Biểu thị logic của OR (hoặc)
?Không biểu thị hoặc có biểu thị một trong các ký tự hoặc phạn vi trược đó
*Không biểu thị hoặc có biểu thị nhiều ký tự hay phạm vi trước đó
+Biểu thị một hoặc nhiều ký tự hay phạm vi trước đó
{n}Biểu thị chính xác n lần của phạm vi ký tự hoặc mục trước đó, ví dụ n{2}
{n, }Biểu thị ít nhất n lần phạm vi ký tự hoặc mục trước đó, ví dụ n{2, }.
{n, m}Biểu thị ít nhất n nhưng không quá m lần, ví dụ n{2, 4} có nghĩa là 2 đến 4 của n
\Ký tự thoát.

Special Character Classes – lớp ký tự đăc biệt

Kí tự đặc biệtÝ nghĩa
\nXuống dòng mới
\rQuay lại
\tHiển thị một tab
\vHiển thị một tab nằm dọc
\fBiểu thị form feed.
\xxxKý tự octal xxx.
\xhhKý tự hex hh.

Shorthand Character Sets

ShorthandÝ nghĩa
\sTrùng khớp với các ký tự khoảng trắng
\dTrùng khớp với các ký tự số 0 – 9
\wTrùng khớp với các ký tự chữ hoa / thường, số, dấu gạch dưới (_)

Predefined functions hoặc Regex library

Các hàm xác định trước (Predefined functions) trong PHP dành cho regex, các hàm này có phân biệt chữ hoa / thường.

HàmMô tả
preg_match()Hàm này tìm kiếm một pattern cụ thể đối với một số chuỗi. Nó trả về true nếu mẫu tồn tại và sai nếu không có.
preg_match_all()Hàm này tìm kiếm tất cả các lần xuất hiện của string pattern so với chuỗi. Chức năng này rất hữu ích cho việc tìm kiếm và thay thế.
ereg_replace()Hàm này tìm string pattern và thay vào chuỗi gốc bằng chuỗi thay thế nếu có.
eregi_replace()Hàm hoạt động giống như ereg_replace() miễn là việc tìm kiếm mẫu không phân biệt chữ hoa chữ thường.
preg_replace()Hàm này hoạt động giống như hàm ereg_replace() với điều kiện là các regex có thể được sử dụng trong string pattern và chuỗi thay thế.
preg_split()Hàm này hoạt động giống như hàm split() của PHP. Nó phân tách chuỗi bằng các regex làm tham số của nó.
preg_grep()Hàm này tìm kiếm tất cả các phần tử khớp với mẫu regex và trả về mảng output.
preg_quote()Hàm này lấy chuỗi và dấu ngoặc kép phía trước mỗi ký tự khớp với regex.
ereg()Hàm này tìm kiếm một chuỗi được chỉ định bởi một pattern và trả về true nếu tìm thấy, nếu không thì trả về false.
eregi()Hàm này hoạt động giống như hàm ereg() miễn là tìm kiếm không phân biệt chữ hoa chữ thường.

Lưu ý:

  • Theo mặc định, regex phân biệt chữ hoa chữ thường.
  • Có sự khác biệt giữa các chuỗi bên trong dấu ngoặc đơn và chuỗi bên trong dấu ngoặc kép trong PHP. Cái trước được xử lý theo nghĩa đen, trong khi đối với các chuỗi bên trong dấu ngoặc kép có nghĩa là nội dung của biến được in thay vì chỉ in tên của chúng.

<?php

// Declare a regular expression
$regex = '/^[a-zA-Z ]*$/';

// Declare a string
$nameString = 'Sharukh khan';

// Use preg_match() function to
// search string pattern
if(preg_match($regex, $nameString)) {
	echo("Name string matching with"
		. " regular expression");
}
else {
	echo("Only letters and white space"
		. " allowed in name string");
}

?>

Output như sau:

Name string matching with regular expression

Bạn có thể xem các ví dụ khác bên dưới:

Ví dụ 1:

<?php

// Declare a regular expression
$regex = "/<b>(.*)<\/b>/U";

// Declare a string
$inputString = "Name: <b>John</b> Position: <b>Developer</b>";

// Use preg_match_all() function to perform
// a global regular expression match
preg_match_all($regex, $inputString, $output);

echo $output[0][0]." <br> ".$output[0][1]."\n";

?>

Output như sau:

John
Developer

Ví dụ 2:

<?php

// Declare a regular expression
$regex = "([0-9]+)";

// Declare a string
$original = "Completed graduation in 2004";
$replaceWith = "2002";

// Use ereg_replace() function to search a
// string pattern in an other string
$original = ereg_replace($regex, $replaceWith, $original);
	
// Display result
echo $original;

?>

Output như sau:

Completed graduation in 2002

Ví dụ 3:

<?php
<?php

// Declare a string
$ip = "134.645.478.670";

// Declare a regular expression
$regex = "/\./";

// Use preg_split() function to
// convert a given string into
// an array
$output = preg_split ($regex, $ip);

echo "$output[0] <br>";
echo "$output[1] <br>";
echo "$output[2] <br>";
echo "$output[3] <br>";

?>

Output như sau:

134
645
478
670

Metacharacters

Có hai loại ký tự được sử dụng trong regex, đó là: Regular characters và Metacharacters. Các ký tự thông thường (Regular characters) là những ký tự có nghĩa ‘theo nghĩa đen’ và Siêu ký tự (Metacharacters) là những ký tự có nghĩa ‘đặc biệt’ trong biểu thức chính quy (Regular Expression).

MetacharacterMô tảVí dụ
.Trùng khớp với bất kỳ ký tự nào ngoài dòng mới/./ khớp với chuỗi có 1 ký tự
^Khớp với đầu chuỗi/^vietnix/ khớp bắt kỳ chuỗi bắt đầu bằng vietnix
$Khớp với string pattern ở cuối chuỗi/com$/ khớp với chuỗi kết thúc bằng com
Ví dụ: google.com
*Không khớp hoặc khớp nhiều ký tự/com*/ khớp với commute, computer, compromise,…
+Khớp với ký tự trước xuất hiện ít nhất 1 lầnFor example /z+oom/ khớp với zoom.
\Chuyển hóa metacharacter khỏi regex/google\.com/ dấu chấm sẽ được xe mlà giá trị, không phải ký tự.
a-zKhớp chữ thườngvietnix
A-ZKhớp chữ hoaVIETNIX
0-9Khớp với bất kỳ số 0 – 9/0-5/ chỉ ra 0, 1, 2, 3, 4, 5
[…]Khớp với lớp ký tự/[pqr]/ trùng khớp với pqr

Thêm ví dụ khác:

Regular expressionÝ nghĩa
^[.-a-z0-9A-Z]Nó khớp với chuỗi có dấu chấm, dấu gạch ngang và bất kỳ chữ thường nào, các số từ 0 đến 9 và các chữ hoa.
+@[a-z0-9A-Z]Nó khớp với chuỗi có ký hiệu @ ở đầu, theo sau là bất kỳ chữ thường, số từ 0 đến 9 và chữ hoa.
+\.[az]{2, 6}$/Nó thoát khỏi dấu chấm và sau đó khớp chuỗi với bất kỳ chữ cái viết thường nào có độ dài chuỗi từ 2 đến 6 ở cuối.

Lưu ý:

  • Metacharacters rất mạnh trong các giải pháp đối sánh mẫu biểu thức chính quy (Regular Expression). Nó có thể xử lý rất nhiều xử lý mẫu phức tạp.
  • Mỗi ký tự không phải là metacharacters chắc chắn là một ký tự thông thường – regular character.
  • Mỗi regular character sẽ tự khớp với cùng một ký tự.

POSIX Regular Expressions

Một số regex trong PHP giống như biểu thức số học được gọi là regex POSIX. Đôi khi, biểu thức phức tạp được tạo bằng cách kết hợp các phần tử hoặc toán tử khác nhau trong regex. Biểu thức chính cơ bản là biểu thức khớp với một ký tự.

Regular ExpressionsÝ nghĩa
[0-9]Khớp với chữ số từ 0 đến 9.
[az]Khớp với bất kỳ chữ cái viết thường nào từ a đến z.
[AZ]Khớp với bất kỳ chữ cái viết hoa nào từ A đến Z.
[aZ]Khớp với bất kỳ chữ cái viết thường nào đến chữ cái viết hoa Z.
[:lower:]Khớp với bất kỳ chữ cái viết thường nào.
[:upper:]Phù hợp với bất kỳ chữ in hoa.
[:alpha:]Khớp với tất cả các ký tự chữ cái hoặc chữ cái từ az và AZ.
[[:alpha:]]Khớp với bất kỳ chuỗi nào chứa các ký tự chữ cái hoặc chữ cái.
[:alnum:]Khớp với tất cả các ký tự chữ và số, tức là tất cả các chữ số (0-9) và chữ cái (az AZ).
[[:alnum:]]Khớp với bất kỳ chuỗi nào chứa ký tự chữ và số và chữ số.
[:digit:]Khớp với tất cả các chữ số từ 0 đến 9.
[[:digit:]]Khớp với bất kỳ chuỗi nào chứa các chữ số từ 0 đến 9.
[:xdigit:]Khớp với tất cả các chữ số thập lục phân.
[:punct:]Khớp với tất cả các ký hiệu dấu chấm câu.
[:blank:]Khớp với các ký tự trống như dấu cách và tab.
[:space:]Khớp với tất cả các ký tự khoảng trắng như ngắt dòng.
[[:space:]]Khớp với bất kỳ chuỗi nào chứa khoảng trắng.
[:cntrl:]Khớp với tất cả các ký tự điều khiển.
[:graph:]Khớp với tất cả các ký tự hiển thị hoặc in ngoài khoảng trắng và ký tự điều khiển.
[:print:]Khớp với tất cả các ký tự in và khoảng trắng ngoại trừ các ký tự điều khiển.
[:word:]Khớp với tất cả các ký tự từ như chữ số, chữ cái và dấu gạch dưới.

Quantifiers trong Regular Expression

Bộ định lượng (quantifiers) là ký tự đặc biệt cho biết số lượng, tần suất, số lần xuất hiện, xảy ra của ký tự hoặc nhóm ký tự ở trong ngoặc. Chúng được gọi là ký tự greedy, lazy

a+Khớp với chuỗi chứa ít nhất một ký tự a.
a*Khớp với chuỗi chứa 0 hoặc nhiều ký tự a.
a?Khớp với bất kỳ chuỗi nào chứa số không hoặc một số a.
a{x}Khớp với chữ ‘a’ chính xác x lần.
a{2, 3}Khớp với bất kỳ chuỗi nào chứa sự xuất hiện của hai hoặc ba chữ a.
a{2, }Khớp với bất kỳ chuỗi nào chứa sự xuất hiện của ít nhất hai chữ a.
a{2}Khớp với bất kỳ chuỗi nào chứa sự xuất hiện của chính xác hai chữ cái a.
a{, y}Khớp với bất kỳ chuỗi nào chứa số lần xuất hiện không quá y số a.
a$Khớp với bất kỳ chuỗi nào có ‘a’ ở cuối chuỗi.
^aKhớp với bất kỳ chuỗi nào có ‘a’ ở đầu chuỗi.
[^a-zA-Z]Khớp với bất kỳ mẫu chuỗi nào không có các ký tự từ a đến z và A đến Z.
a.aKhớp với bất kỳ mẫu chuỗi nào chứa a, sau đó là bất kỳ ký tự nào và sau đó là ký tự a khác.
^.{3}$Khớp với bất kỳ chuỗi nào có chính xác ba ký tự.

Lưu ý:

  • Ký tự $ bên trong biểu thức sẽ khớp với phần cuối của chuỗi đích.
  • Các ký hiệu *, ?, + trong regexx biểu thị tần suất xuất hiện của một ký tự. (Trong 3 tình huống chung: không xảy ra hoặc có nhiều lần, không lần nào hoặc một lần và một hoặc nhiều lần)
  • Ký tự ^ bên trong biểu thức sẽ khớp với phần đầu của chuỗi đích.
  • Các . metacharacter khớp với bất kỳ ký tự đơn nào ngoài dòng mới.

Các dạng regex thường thấy:

  • Regexp
  • RegexBuddy

Biểu thức chính quy là một pattern mô tả một số văn bản chuỗi trong một pattern cụ thể hoặc nó được định nghĩa là một thuật toán pattern-matching được biểu thị trong một dòng. Các biểu thức chính quy rất hữu ích trong thế giới lập trình để kiểm tra xác thực và nhận dạng các mẫu cụ thể. PHP cung cấp nhiều hàm dựng sẵn hỗ trợ các regex. Metacharacters giúp tạo các mẫu phức tạp.

Lời kết

Vietnix hy vọng nội dung bài viết trên đã giúp bạn hiểu rõ hơn về biểu thức chính quy Regular Expression trong PHP. Ngoài ra, bạn cũng có thể tham khảo thêm các bài viết khác tại vietnix.vn để hiểu hơn về lập trình, chúc bạn thành công!

Cao Lê Viết Tiến

PHP Leader
tại
Vietnix

Kết nối với mình qua

Icon Quote
Icon Quote

Học lập trình online cùng vietnix

Học lập trình online cùng Vietnix

PHPXem thêmThu gọn