PHP Manual
Prev |  | Next

# preg_match_all

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>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>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);

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

Prev | Home | Next
preg_match | Up | preg_replace