Hàm preg_match_all
Hàm preg_match_all thực hiện tìm kiếm toàn cục mẫu trong một chuỗi. Tham số đầu tiên nhận biểu thức chính quy, tham số thứ hai - chuỗi để tìm kiếm, tham số thứ ba - mảng để lưu kết quả. Tham số thứ tư không bắt buộc xác định cấu trúc dữ liệu trả về, và tham số thứ năm không bắt buộc - vị trí bắt đầu tìm kiếm.
Cú pháp
preg_match_all(pattern, subject, matches, [flags], [offset]);
Cờ (Flags)
Hãy xem, tham số thứ tư có thể nhận những giá trị nào:
| Tham số | Mô tả |
|---|---|
PREG_PATTERN_ORDER |
Chế độ mặc định. Kết quả được nhóm theo các nhóm (capturing groups) - phần tử số không của mảng chứa các nhóm số không, phần tử thứ nhất của mảng chứa các nhóm thứ nhất và cứ tiếp tục như vậy. |
PREG_SET_ORDER |
Kết quả được nhóm theo từng lần khớp - mỗi phần tử của mảng chứa một mảng với các nhóm đã tìm thấy. |
PREG_OFFSET_CAPTURE |
Cho mỗi kết quả khớp, vị trí trong chuỗi được trả về. Mỗi kết quả là một mảng, trong đó phần tử số không chứa chuỗi khớp, còn phần tử thứ nhất - vị trí (offset) của nó. |
PREG_UNMATCHED_AS_NULL |
Các nhóm không khớp được trả về dưới dạng null thay vì
chuỗi rỗng.
|
Ví dụ
Hãy tìm tất cả các chữ số trong chuỗi:
<?php
$str = 'abc 123 def 456';
preg_match_all('/\d+/', $str, $res);
var_dump($res[0]);
?>
Kết quả thực thi mã:
['123', '456']
Ví dụ
Hãy tìm tất cả các chữ cái 'a' trong chuỗi:
<?php
$str = 'banana';
preg_match_all('/a/', $str, $res);
var_dump($res[0]);
?>
Kết quả thực thi mã:
['a', 'a', 'a']
Ví dụ
Hãy trích xuất tất cả các mốc thời gian từ chuỗi và các thành phần của chúng:
<?php
$time = '12:01:02 13:03:04 14:05:06';
preg_match_all('#(\d\d):(\d\d):(\d\d)#', $time, $res);
var_dump($res);
?>
Kết quả thực thi mã:
[
0 => ['12:01:02', '13:03:04', '14:05:06'],
1 => ['12', '13', '14'],
2 => ['01', '03', '05'],
3 => ['02', '04', '06']
]
Ví dụ
Và bây giờ hãy sử dụng cờ PREG_SET_ORDER
để nhóm kết quả theo từng lần khớp:
<?php
$time = '12:01:02 13:03:04 14:05:06';
preg_match_all('#(\d\d):(\d\d):(\d\d)#', $time, $res, PREG_SET_ORDER);
var_dump($res);
?>
Kết quả thực thi mã:
[
0 => '12:01:02',
1 => '12',
2 => '01',
3 => '02'
],
[
0 => '13:03:04',
1 => '13',
2 => '03',
3 => '04'
],
[
0 => '14:05:06',
1 => '14',
2 => '05',
3 => '06'
]
Xem thêm
-
hàm
preg_match,
hàm tìm kiếm kết quả khớp đầu tiên với biểu thức chính quy -
hàm
preg_replace,
hàm thực hiện tìm kiếm và thay thế theo biểu thức chính quy