preg_match_all
preg_match_all
Perform a global regular expression match
**preg_match_all** string $pattern string $subject array $matches int $flags int $offset
Searches for all matches to the regular
expression given in and puts them in
in the order specified by
.
subject``pattern``matches``flags
After the first match is found, the subsequent searches are continued on from end of the last match.
patternThe pattern to search for, as a string.
subjectThe input string.
matches
Array of all matches in multi-dimensional array ordered according to
.
flags
flags
If no order flag is given, is
assumed.
PREG_PATTERN_ORDER
Can be a combination of the following flags (note that it doesn't make
sense to use together with
):
`PREG_PATTERN_ORDER``PREG_SET_ORDER``PREG_PATTERN_ORDER`
Orders results so that is an array of full
pattern matches, is an array of strings matched by
the first parenthesized subpattern, and so on.
`$matches[0]``$matches[1]`
```php
]+>(.*)[^>]+>|U",
"example:
```php
<b>example: </b>, <div align=left>this is a test</div>
example: , this is a test
So, contains an array of strings that matched the full pattern,
and contains an array of strings enclosed by tags.
`$out[0]``$out[1]`
If the pattern contains named subpatterns,
additionally contains entries for keys with the subpattern name.
`$matches`
If the pattern contains duplicate named subpatterns, only the rightmost
subpattern is stored in .
`$matches[NAME]````php
foo)|(?
```php
Array
(
[0] =>
[1] => bar
)
PREG_SET_ORDER
Orders results so that is an array of first set
of matches, is an array of second set of matches,
and so on.
`$matches[0]``$matches[1]````php
]+>(.*)[^>]+>|U",
"example:
```php
<b>example: </b>, example:
<div align="left">this is a test</div>, this is a test
PREG_OFFSET_CAPTURE
If this flag is passed, for every occurring match the appendant string
offset (in bytes) will also be returned. Note that this changes the value of
into an array of arrays where every element is an
array consisting of the matched string at offset
and its string offset into at offset
.
`matches``0``subject``1````php
```php
Array
(
[0] => Array
(
[0] => Array
(
[0] => foobarbaz
[1] => 0
)
)
[1] => Array
(
[0] => Array
(
[0] => foo
[1] => 0
)
)
[2] => Array
(
[0] => Array
(
[0] => bar
[1] => 3
)
)
[3] => Array
(
[0] => Array
(
[0] => baz
[1] => 6
)
)
)
PREG_UNMATCHED_AS_NULL
If this flag is passed, unmatched subpatterns are reported as null;
otherwise they are reported as an empty .
string
offset
Normally, the search starts from the beginning of the subject string.
The optional parameter can be used to
specify the alternate place from which to start the search (in bytes).
offset
Opmerking: > Using is not equivalent to passing to in place of the subject string, because can contain assertions such as , or . See for examples.
offset``substr($subject, $offset)``preg_match_all``pattern^$(?<=x)preg_match
Returns the number of full pattern matches (which might be zero),return.falseforfailure.
Voorbeeld: Getting all phone numbers out of some text.
<?php
preg_match_all("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x",
"Call 555-1212 or 1-800-555-1212", $phones);
?>
Voorbeeld: Find matching HTML tags (greedy)
<?php
// The \\2 is an example of backreferencing. This tells pcre that
// it must match the second set of parentheses in the regular expression
// itself, which would be the ([\w]+) in this case. The extra backslash is
// required because the string is in double quotes.
$html = "<b>bold text</b><a href=howdy.html>click me</a>";
preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER);
foreach ($matches as $val) {
echo "matched: " . $val[0] . "\n";
echo "part 1: " . $val[1] . "\n";
echo "part 2: " . $val[2] . "\n";
echo "part 3: " . $val[3] . "\n";
echo "part 4: " . $val[4] . "\n\n";
}
?>
matched: <b>bold text</b>
part 1: <b>
part 2: b
part 3: bold text
part 4: </b>
matched: <a href=howdy.html>click me</a>
part 1: <a href=howdy.html>
part 2: a
part 3: click me
part 4: </a>
Voorbeeld: Using named subpattern
<?php
$str = <<<FOO
a: 1
b: 2
c: 3
FOO;
preg_match_all('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches);
/* Alternative */
// preg_match_all('/(?<name>\w+): (?<digit>\d+)/', $str, $matches);
print_r($matches);
?>
Array
(
[0] => Array
(
[0] => a: 1
[1] => b: 2
[2] => c: 3
)
[name] => Array
(
[0] => a
[1] => b
[2] => c
)
[1] => Array
(
[0] => a
[1] => b
[2] => c
)
[digit] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[2] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
)
PCRE Patternspreg_quote``preg_match``preg_replace``preg_split``preg_last_error