PHP.nl

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:
this is a test
", $out, PREG_PATTERN_ORDER); echo $out[0][0] . ", " . $out[0][1] . "\n"; echo $out[1][0] . ", " . $out[1][1] . "\n"; ?>

```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)|(?bar)/', 'foo bar', $matches, PREG_PATTERN_ORDER ); print_r($matches['match']); ?>

```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:
this is a test
", $out, PREG_SET_ORDER); echo $out[0][0] . ", " . $out[0][1] . "\n"; echo $out[1][0] . ", " . $out[1][1] . "\n"; ?>

```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