Ở bài trước mình đã giới thiệu với mọi người về hàm preg_match()
trong PHP rồi, nhưng hàm đó chỉ có thể so khớp đúng một lần duy nhất mà không thể so khớp toàn bộ chuỗi được. Để giải quyết vấn đề này chúng ta sẽ phải sử dụng hàm preg_match_all()
.
1, Hàm preg_match_all().
-Hàm preg_match_all()
trong PHP có tác dụng so khớp toàn bộ các pattern trong chuỗi. Còn lại các tham số truyền vào với chức năng của nó thì giống hệt như hàm preg_match().
Cú pháp:
preg_match_all($pattern, $subject, $match, $flags, $offset);
Trong đó:
- $pattern là chuỗi Regular Expression.
- $subject là chuỗi cần so khớp.
- $match là kết trả về, được truyền vào dưới dạng tham chiếu (có thể bỏ trống).
- $flags là tham số chỉ ra vị trí cắt chuỗi so khớp, mặc định
$flag = 0
(có thể bỏ trống). - $offset là tham số chỉ ra vị trí bắt đầu của việc so khớp chuỗi, mặc định
$offset = 0
(có thể bỏ trống).
2, Ví dụ.
VD: So sánh sự khác biệt giữa hàm preg_match()
và preg_match_all().
-Mời mọi người cùng xem ví dụ và kết quả của hai trường hợp sau.
+TH1: sử dụng hàm preg_match().
<?php
$pattern = '/<(.+?)>(.+?)<\/(.+?)>/';
$string = '<b>Học</b> học nữa <h2>học mãi</h2>';
preg_match($pattern, $string, $match);
print_r($match);
Kết quả:
Array
(
[0] => <b>Học</b>
[1] => b
[2] => Học
[3] => b
)
+TH2: sử dụng hàm preg_match_all().
<?php
$pattern = '/<(.+?)>(.+?)<\/(.+?)>/';
$string = '<b>Học</b> học nữa <h2>học mãi</h2>';
preg_match_all($pattern, $string, $match);
print_r($match);
Kết quả:
Array
(
[0] => Array
(
[0] => <b>Học</b>
[1] => <h2>học mãi</h2>
)
[1] => Array
(
[0] => b
[1] => h2
)
[2] => Array
(
[0] => Học
[1] => học mãi
)
[3] => Array
(
[0] => b
[1] => h2
)
)
Kết luận: Như vậy các bạn đã thấy khi sử dụng hàm preg_match_all() thì nó sẽ so khớp tất cả các đoạn khớp trong chuỗi. Còn hàm preg_match() nó sẽ so khớp đoạn đầu tiên còn các đoạn tiếp theo nó sẽ không so khớp nữa.
3, Lời kết.
-Vì hàm này có các tham số truyền vào giống hệt như hàm preg_match() nên mình sẽ không lấy ví dụ cho từng trường hợp nữa (ai cần xem lại), mà chỉ đi vào so sánh sự khác nhau giữa hai hàm thôi.
Đăng ký nhận tin.
Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!
0 Comments