Funktionen preg_match_all
Funktionen preg_match_all udfører en global søgning efter et mønster i en streng. Den første parameter er det regulære udtryk, den anden er strengen, der skal søges i, den tredje er arrayet til at gemme resultaterne. Den fjerde valgfrie parameter bestemmer strukturen af de returnerede data, og den femte valgfrie parameter er offset for søgningens start.
Syntaks
preg_match_all(pattern, subject, matches, [flags], [offset]);
Flag
Lad os se, hvilke værdier den fjerde parameter kan tage:
| Parameter | Beskrivelse |
|---|---|
PREG_PATTERN_ORDER |
Standardtilstand. Resultaterne grupperes efter capture groups - det nulte element i arrayet indeholder de nulte capture groups, det første element i arrayet indeholder de første capture groups og så videre. |
PREG_SET_ORDER |
Resultaterne grupperes efter matches - hvert element i arrayet indeholder et array med de fundne capture groups. |
PREG_OFFSET_CAPTURE |
For hvert match returneres positionen i strengen. Hvert resultat er et array, hvor det nulte element indeholder matchet, og det første - dens offset. |
PREG_UNMATCHED_AS_NULL |
Capture groups der ikke matcher returneres som null i stedet for
tomme strenge.
|
Eksempel
Lad os finde alle cifre i en streng:
<?php
$str = 'abc 123 def 456';
preg_match_all('/\d+/', $str, $res);
var_dump($res[0]);
?>
Resultat af kodeudførelse:
['123', '456']
Eksempel
Lad os finde alle bogstaver 'a' i en streng:
<?php
$str = 'banana';
preg_match_all('/a/', $str, $res);
var_dump($res[0]);
?>
Resultat af kodeudførelse:
['a', 'a', 'a']
Eksempel
Lad os udtrække alle tidsstempler fra en streng og deres komponenter:
<?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);
?>
Resultat af kodeudførelse:
[
0 => ['12:01:02', '13:03:04', '14:05:06'],
1 => ['12', '13', '14'],
2 => ['01', '03', '05'],
3 => ['02', '04', '06']
]
Eksempel
Og lad os nu bruge flaget PREG_SET_ORDER
for at gruppere efter matches:
<?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);
?>
Resultat af kodeudførelse:
[
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'
]
Se også
-
funktionen
preg_match,
som søger efter det første match med et regulært udtryk -
funktionen
preg_replace,
som udfører søgning og erstatning med et regulært udtryk