PHP Manual
Prev |  | Next

# preg_match_all

(3.0.9 - 3.0.18 only, PHP 4 >= 4.0.0)

preg_match_all -- Perform a global regular expression match

## Description

``int preg_match_all` (string pattern, string subject, array matches [, int order])`

Searches `subject` for all matches to the regular expression given in `pattern` and puts them in `matches` in the order specified by `order`.

After the first match is found, the subsequent searches are continued on from end of the last match.

`order` can be one of two things:

PREG_PATTERN_ORDER

  Orders results so that $matches[0] is an array of full pattern matches, $matches[1] is an array of strings matched by the first parenthesized subpattern, and so on.

      preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",
          "<b>example: </b><div align=left>this is a test</div>",
          $out, PREG_PATTERN_ORDER);
      print $out[0][0].", ".$out[0][1]."\n";
      print $out[1][0].", ".$out[1][1]."\n"

  This example will produce:

      <b>example: </b>, <div align=left>this is a test</div>
      example: , this is a test

  So, $out[0] contains array of strings that matched full pattern, and $out[1] contains array of strings enclosed by tags.

PREG_SET_ORDER

  Orders results so that $matches[0] is an array of first set of matches, $matches[1] is an array of second set of matches, and so on.

      preg_match_all ("|<;[^>]+>(.*)</[^>]+>|U",
          "<b>example: </b><div align=left>this is a test</div>",
          $out, PREG_SET_ORDER);
      print $out[0][0].", ".$out[0][1]."\n";
      print $out[1][0].", ".$out[1][1]."\n";

  This example will produce:

      <b>example: </b>, example:
      <div align=left>this is a test</div>, this is a test

  In this case, $matches[0] is the first set of matches, and $matches[0][0] has text matched by full pattern, $matches[0][1] has text matched by first subpattern and so on. Similarly, $matches[1] is the second set of matches, etc.

If `order` is not specified, it is assumed to be PREG_PATTERN_ORDER.

Returns the number of full pattern matches, or `FALSE` if no match is found or an error occurred.

Example 1. Getting all phone numbers out of some text.
    preg_match_all ("/\(?  (\d{3})?  \)?  (?(1)  [\-\s] ) \d{3}-\d{4}/x",
                    "Call 555-1212 or 1-800-555-1212", $phones);

Example 2. Find matching HTML tags (greedy)
    // 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);

    for ($i=0; $i< count($matches[0]); $i++) {
    echo "matched: ".$matches[0][$i]."\n";
    echo "part 1: ".$matches[1][$i]."\n";
    echo "part 2: ".$matches[3][$i]."\n";
    echo "part 3: ".$matches[4][$i]."\n\n";
    }

This example will produce:

    matched: <b>bold text</b>
    part 1: <b>
    part 2: bold text
    part 3: </b>

    matched: <a href=howdy.html>click me</a>
    part 1: <a href=howdy.html>
    part 2: click me
    part 3: </a>

See also preg_match(), preg_replace(), and preg_split().

Prev | Home | Next
preg_match | Up | preg_replace