What do the preg_match() and preg_match_all() functions do and how can I use them?
-
3I assume that you've looked at the PHP documentation already? http://www.php.net/manual/en/function.preg-match.php and http://www.php.net/manual/en/function.preg-match-all.php – Philip Nov 03 '10 at 15:47
-
5@Philip: yes, I did but I didn`t understand it. – sikas Nov 03 '10 at 16:06
-
The documentation did not explain differences between this 2. It took a little while to read but answer given from people here saved a lot of time. – MaXi32 Nov 12 '20 at 14:13
3 Answers
preg_match
stops looking after the first match. preg_match_all
, on the other hand, continues to look until it finishes processing the entire string. Once match is found, it uses the remainder of the string to try and apply another match.

- 10,606
- 4
- 50
- 70
-
10Thanks, this answer is much more useful to me than the chosen one, because you actually simplify how the docs explain it. Thanks again! – Alexandre TryHard Leblanc Feb 04 '15 at 14:53
Both preg_match and preg_match_all functions in PHP use Perl compatible regular expressions.
You can watch this series to fully understand Perl compatible regular expressions: https://www.youtube.com/watch?v=GVZOJ1rEnUg&list=PLfdtiltiRHWGRPyPMGuLPWuiWgEI9Kp1w
preg_match($pattern, $subject, &$matches, $flags, $offset)
The preg_match
function is used to search for a particular $pattern
in a $subject
string and when the pattern is found the first time, it stops searching for it. It outputs matches in the $matches
, where $matches[0]
will contain the text that matched the full pattern, $matches[1]
will have the text that matched the first captured parenthesized sub-pattern, and so on.
Example of preg_match()
<?php
preg_match(
"|<[^>]+>(.*)</[^>]+>|U",
"<b>example: </b><div align=left>this is a test</div>",
$matches
);
var_dump($matches);
Output:
array(2) {
[0]=>
string(16) "<b>example: </b>"
[1]=>
string(9) "example: "
}
preg_match_all($pattern, $subject, &$matches, $flags)
The preg_match_all
function searches for all the matches in a string and outputs them in a multi-dimensional array ($matches
) ordered according to $flags
. When no $flags
value is passed, it 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 sub-pattern, and so on.
Example of preg_match_all()
<?php
preg_match_all(
"|<[^>]+>(.*)</[^>]+>|U",
"<b>example: </b><div align=left>this is a test</div>",
$matches
);
var_dump($matches);
Output:
array(2) {
[0]=>
array(2) {
[0]=>
string(16) "<b>example: </b>"
[1]=>
string(36) "<div align=left>this is a test</div>"
}
[1]=>
array(2) {
[0]=>
string(9) "example: "
[1]=>
string(14) "this is a test"
}
}
A concrete example:
preg_match("/find[ ]*(me)/", "find me find me", $matches):
$matches = Array(
[0] => find me
[1] => me
)
preg_match_all("/find[ ]*(me)/", "find me find me", $matches):
$matches = Array(
[0] => Array
(
[0] => find me
[1] => find me
)
[1] => Array
(
[0] => me
[1] => me
)
)
preg_grep("/find[ ]*(me)/", ["find me find me", "find me findme"]):
$matches = Array
(
[0] => find me find me
[1] => find me findme
)

- 489
- 1
- 6
- 11