Hướng dẫn php preg_match period - kỳ php preg_match

  • Hàm preg_match trong PHP tìm kiếm, kiểm tra, so khớp chuỗi cho mẫu, trả về true nếu mẫu tồn tại và ngược lại sai. Bài viết dưới đây sẽ định nghĩa preg_match trong PHP và hướng dẫn sử dụng hàm preg_match trong PHP.

    Hướng dẫn php preg_match period - kỳ php preg_match

    1. Cú pháp hàm preg_match trong PHP.

    preg_match ( $pattern , $subject, &$matches)

    Trong đó:

    • $pattern là biểu thức Regular Expression

    • $subject là chuỗi cần kiểm tra

    • $matches là kết quả trả về, đây là một tham số truyền vào ở dạng tham chiếu.

    2. Định nghĩa và cách sử dụng

    Hàm preg_match () tìm kiếm, so khớp chuỗi cho mẫu, trả về true nếu mẫu tồn tại và ngược lại sai.

    Nếu tham số đầu vào tùy chọn pattern_array được cung cấp, thì pattern_array sẽ chứa các phần khác nhau của các mẫu con chứa trong mẫu tìm kiếm. Nếu lệnh này được chuyển thành PREG_OFFSET_CAPTURE, với mỗi lần trùng khớp xảy ra, bù trừ chuỗi ứng dụng cũng sẽ được trả về.

    Thông thường, tìm kiếm bắt đầu từ đầu chuỗi chủ đề. Có thể sử dụng bù tham số tùy chọn để chỉ định địa điểm thay thế để từ đó bắt đầu tìm kiếm.

    Thí dụ:

    Sau đây là đoạn mã, sao chép và dán mã này vào một tệp và xác minh kết quả.

      $line = "Vi is the greatest word processor ever created!";

      // perform a case-Insensitive search for the word "Vi"

      if (preg_match("/\bVi\b/i", $line, $match)) :

         print "Match found!";

         endif;

    ?>

    Điều này sẽ tạo ra kết quả sau:

    Hướng dẫn php preg_match period - kỳ php preg_match

    3. Các ví dụ hàm preg_match trong PHP

    Ví dụ 1: xem thử giá trị của biến $matches\

    preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);

    print_r($matches);

    ?>

    Điều này sẽ tạo ra kết quả sau:

    Hướng dẫn php preg_match period - kỳ php preg_match

    Hướng dẫn php preg_match period - kỳ php preg_match

    3. Các ví dụ hàm preg_match trong PHP

    Ví dụ 1: xem thử giá trị của biến $matches\

    preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);

    Kết quả hiện ra màn hình là:

    Ví dụ 2: Capturing Value - gom nhóm 1 cấp

    ';

    print_r($matches);

    Ví dụ 2: Capturing Value - gom nhóm 1 cấp

    $subject = "freetuts.net";

    Điều này sẽ tạo ra kết quả sau:

    Hướng dẫn php preg_match period - kỳ php preg_match

    3. Các ví dụ hàm preg_match trong PHP

    Ví dụ 1: xem thử giá trị của biến $matches\

    preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);

    Kết quả hiện ra màn hình là:

    Ví dụ 2: Capturing Value - gom nhóm 1 cấp

    ';

    print_r($matches);

    Ví dụ 2: Capturing Value - gom nhóm 1 cấp

    $subject = "freetuts.net";

    Điều này sẽ tạo ra kết quả sau:

    Hướng dẫn php preg_match period - kỳ php preg_match

    3. Các ví dụ hàm preg_match trong PHP

    Ví dụ 1: xem thử giá trị của biến $matches\

    preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);

    var_dump($matches);

    Kết quả hiện ra màn hình là:

    Ví dụ 2: Capturing Value - gom nhóm 1 cấp

    ?>

    Hướng dẫn php preg_match period - kỳ php preg_match

    Điều này sẽ tạo ra kết quả sau:

    3. Các ví dụ hàm preg_match trong PHP

    • Ví dụ 1: xem thử giá trị của biến $matches\
    • preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);

Nếu bạn theo dõi serie học Regular Expression từ đầu cho tới giờ thì hàm

';
1 không còn xa lạ gì nữa, nhưng nếu bạn là khách viếng thăm và đây là bài đầu tiên của bạn thì mình khuyên bạn nên quay lại đọc từ bài Regular Expression là gì thì sẽ tốt hơn. Tuy nhiên mình vẫn giới thiệu từ đầu để phù hợp với mọi đối tượng luôn.Tuy nhiên mình vẫn giới thiệu từ đầu để phù hợp với mọi đối tượng luôn.

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.freetuts.net, không được copy dưới mọi hình thức.

1. Hàm preg_match() trong PHP

Hàm

';
1 được dùng để kiểm tra, so khớp và lấy kết quả của việc so sánh chuỗi dựa vào biểu thức chính quy Regular Expression, hàm này có ba tham số và có cú pháp như sau:

  • ';
    3

Trong đó::

  • ';
    4 là biểu thức Regular ExpressionRegular Expression
  • ';
    5 là chuỗi cần kiểm tra
  • ';
    6 là kết quả trả về, đây là một tham số truyền vào ở dạng tham chiếu.

Kết quả::

Bài viết này được đăng tại [free tuts .net]

  • Kết quả của hàm
    ';
    1 sẽ trả về
    ';
    8 nếu so khớp và
    ';
    9 nếu không khớp.

Ví dụ: kiểm tra một chuỗi có phải là một dãy số hay không.: kiểm tra một chuỗi có phải là một dãy số hay không.

$pattern = '/^[0-9]+$/';
$subject = '0979306603';
if (preg_match($pattern, $subject, $matches)){
    echo 'Đây là một dãy số';
}

Nếu bạn thắc mắc tại sao biến

';
6 không tồn tại và mình truyền vào nhưng chương trình chạy không bị lỗi thì mình xin giải thích rằng đó là vì tham số thứ ba
';
6 là một tham chiếu nên bạn có thể truyền được như vậy, và bạn có thể đặt cho nó một cái tên bất kỳ chứ không nhất thiết phải là
';
6.không tồn tại và mình truyền vào nhưng chương trình chạy không bị lỗi thì mình xin giải thích rằng đó là vì tham số thứ ba
';
6 là một tham chiếu nên bạn có thể truyền được như vậy, và bạn có thể đặt cho nó một cái tên bất kỳ chứ không nhất thiết phải là
';
6.

Bây giờ mình sẽ thực hành một số ví dụ để bạn hiểu rõ hơn về hàm này nhé.

2. Các ví dụ hàm preg_match trong php

Mình xin nhắc lại kết quả của hàm

';
1 sẽ trả về
$pattern = '/^[0-9]+$/';
$subject = '0979306603';
if (preg_match($pattern, $subject, $matches)){
    echo 'Đây là một dãy số';
}
4 nên nếu bạn muốn lấy kết quả thì phải thông qua biến
';
6.

Ví dụ 1: xem thử giá trị của biến

';
6: xem thử giá trị của biến
';
6

$subject = "freetuts.net";
$pattern = '/net/';
preg_match($pattern, $subject, $matches);
echo '
';
print_r($matches);
echo '
';

Kết quả:

Bài viết này được đăng tại [free tuts .net]

Kết quả của hàm

';
1 sẽ trả về
';
8 nếu so khớp và
';
9 nếu không khớp.

Ví dụ: kiểm tra một chuỗi có phải là một dãy số hay không.: Capturing Value - gom nhóm 1 cấp

$subject = "freetuts.net";
$pattern = '/(net)/';
preg_match($pattern, $subject, $matches);
echo '
';
print_r($matches);
echo '
';

Kết quả:

Array
(
    [0] => net
    [1] => net
)

Bài viết này được đăng tại [free tuts .net]: Capturing Value - gom nhóm 2 cấp

$subject = "freetuts.net";
$pattern = '/((net))/';
preg_match($pattern, $subject, $matches);
echo '
';
print_r($matches);
echo '
';

Kết quả:

Array
(
    [0] => net
    [1] => net
    [2] => net
)

Bài viết này được đăng tại [free tuts .net]

Kết quả của hàm

';
1 sẽ trả về
';
8 nếu so khớp và
';
9 nếu không khớp.net, tuy nhiên cách khai báo lại khác nhau:

  • Ví dụ: kiểm tra một chuỗi có phải là một dãy số hay không.
  • Nếu bạn thắc mắc tại sao biến
    ';
    6 không tồn tại và mình truyền vào nhưng chương trình chạy không bị lỗi thì mình xin giải thích rằng đó là vì tham số thứ ba
    ';
    6 là một tham chiếu nên bạn có thể truyền được như vậy, và bạn có thể đặt cho nó một cái tên bất kỳ chứ không nhất thiết phải là
    ';
    6.
  • Bây giờ mình sẽ thực hành một số ví dụ để bạn hiểu rõ hơn về hàm này nhé.

2. Các ví dụ hàm preg_match trong php

  • Mình xin nhắc lại kết quả của hàm
    ';
    1 sẽ trả về
    $pattern = '/^[0-9]+$/';
    $subject = '0979306603';
    if (preg_match($pattern, $subject, $matches)){
        echo 'Đây là một dãy số';
    }
    4 nên nếu bạn muốn lấy kết quả thì phải thông qua biến
    ';
    6.
  • Ví dụ 1: xem thử giá trị của biến
    ';
    6
  • $subject = "freetuts.net";
    $pattern = '/net/';
    preg_match($pattern, $subject, $matches);
    echo '
    ';
    print_r($matches);
    echo '
    ';

Nếu bạn không hiểu khái niệm về Capturing Value thì quay lại các bài trước dể đọc nhé:Capturing Value thì quay lại các bài trước dể đọc nhé:

  • Quy tắc Regular Expression căn bản (p1)
  • Quy tắc Regular Expression căn bản (p2)

Kết luận:

Dựa vào nhận xét trên ta có được kết luận như sau::

  • Kết quả của biến
    ';
    6 là một mảng các Capturing Value được so khớp, nhưng bao nhiêu phần tử thì phụ thuộc vào biểu thức Regular Expression.
  • Biểu thức sẽ duyệt từ trái sang phải và toàn bộ Regex sẽ là nhóm thứ nhất (tức là phần tử 0), duyệt tiếp và mỗi lần gặp cặp biểu thức Regex (được gom nhóm bởi
    $subject = "freetuts.net";
    $pattern = '/(net)/';
    preg_match($pattern, $subject, $matches);
    echo '
    ';
    print_r($matches);
    echo '
    ';
    8) thì sẽ coi như là phần tử tiếp theo. (được gom nhóm bởi
    $subject = "freetuts.net";
    $pattern = '/(net)/';
    preg_match($pattern, $subject, $matches);
    echo '
    ';
    print_r($matches);
    echo '
    ';
    8) thì sẽ coi như là phần tử tiếp theo.

3. Một vi dụ khác hàm preg_match

Ví dụ 1: Chúng ta sẽ làm một ví dụ lấy domain của https://freetuts.net nằm trong một chuỗi cho trước. Chúng ta sẽ làm một ví dụ lấy domain của https://freetuts.net nằm trong một chuỗi cho trước.

$subject = "website hoc mien phi https://freetuts.net rat la hay";
$pattern = '/(http)(.+)(net)/';
preg_match($pattern, $subject, $matches);
echo '
';
print_r($matches);
echo '
';

Kết quả sẽ trả về 4 phần tử tại vì trong pattern có 3 đoạn gom nhóm Regex, kết hợp với toàn bộ regex nữa nên kết quả sẽ là 4 phần tử.

Array
(
    [0] => https://freetuts.net
    [1] => http
    [2] => ://freetuts.
    [3] => net
)

Ví dụ 2: Bonus cho các bạn thêm một ví dụ nữa đó là lấy chuỗi nằm trong cặp ngoặc vuông

$subject = "freetuts.net";
$pattern = '/(net)/';
preg_match($pattern, $subject, $matches);
echo '
';
print_r($matches);
echo '
';
9. Bonus cho các bạn thêm một ví dụ nữa đó là lấy chuỗi nằm trong cặp ngoặc vuông
$subject = "freetuts.net";
$pattern = '/(net)/';
preg_match($pattern, $subject, $matches);
echo '
';
print_r($matches);
echo '
';
9.

';
0

4. Lời kết

Bài này mình thấy khá là hay bởi vì kết hợp RegEx với hàm preg_match() trong PHP bạn có thể lấy được bất kì một chuỗi con nào miễn là có một quy tắc để lấy, hàm này không những dùng để lấy chuỗi con dựa vào việc so khớp mà nó còn có tác dụng kiểm tra kết quả so khớp và trả về

$pattern = '/^[0-9]+$/';
$subject = '0979306603';
if (preg_match($pattern, $subject, $matches)){
    echo 'Đây là một dãy số';
}
4.preg_match() trong PHP bạn có thể lấy được bất kì một chuỗi con nào miễn là có một quy tắc để lấy, hàm này không những dùng để lấy chuỗi con dựa vào việc so khớp mà nó còn có tác dụng kiểm tra kết quả so khớp và trả về
$pattern = '/^[0-9]+$/';
$subject = '0979306603';
if (preg_match($pattern, $subject, $matches)){
    echo 'Đây là một dãy số';
}
4.

Ngoài ra chúng ta hay sử dụng hàm preg_match() để validate dữ liệu như kiểm tra định dạng Email, Phone, .. và một chức năng khá hay khác là bóc tách dữ liệu từ website khác.preg_match() để validate dữ liệu như kiểm tra định dạng Email, Phone, .. và một chức năng khá hay khác là bóc tách dữ liệu từ website khác.