PHP

Можете популярно объяснить чем отличается Preg_match_all от preg_match

В интернете есть описание , но я ничего не пойму из того что там написано. Слова вроде русские, но ничего не понятно
Напишу как сам понимаю.

preg_match() ищет только первое соответствие в строке, preg_match_all() находит все. Как правильно ответил Редис Александрович, для простой проверки содержит ли строка шаблон достаточно preg_match().

Например есть строка $text = "param=1;param=2;param=3";

Нужно получить цифровые данные (1, 2, 3).

Если написать preg_match('/param=(\d+)/', $text, $matches) — в массиве $matches окажется только первый результат:
Array
(
[0] => param=1
[1] => 1
)

В первом элементе полное вхождение шаблона, во втором подмаска, т. е что обернули в круглые скобки.

Если изменить на preg_match_all получим все совпадения:
Array
(
[0] => Array
(
[0] => param=1
[1] => param=2
[2] => param=3
)

[1] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
)

Флаг PREG_PATTERN_ORDER используется по умолчанию. Если по какой-то причине он неудобен для обработки данных можно использовать другой, например preg_match_all('/param=(\d+)/', $text, $matches, PREG_SET_ORDER) и получим:
Array
(
[0] => Array
(
[0] => param=1
[1] => 1
)

[1] => Array
(
[0] => param=2
[1] => 2
)

[2] => Array
(
[0] => param=3
[1] => 3
)

)
АК
Александр Круглов
89 540
Лучший ответ
Майкл Скофилд у меня не получается. что не так делаю? Одну только дату находит
-------------------
$str = '2025-10-31 2025-11-30 2025-12-31';
$regexp = '#([\d]{4})\-([1-12]{2})\-([1-31]{2})#';
echo preg_match_all($regexp, $str, $p);
var_dump($p);
----------------------
Ты меньше читай такие мануалы за 98 год. PHP итак неадекватный по историческим причинам, а такие документации написаны школьниками не добавять понимания
Если упростить preg_match позволяет узнать есть в строке подстрока или нет, а Preg_match_all позволит узнать конкретно места где есть совпадение.
Лично я интуитивно использую preg_match_all чтобы найти все совпадения полагая что all оно и есть all.
А если ищу ограниченное количество совпадений то preg_match