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
)
)
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
)
)
Ты меньше читай такие мануалы за 98 год. PHP итак неадекватный по историческим причинам, а такие документации написаны школьниками не добавять понимания
Если упростить preg_match позволяет узнать есть в строке подстрока или нет, а Preg_match_all позволит узнать конкретно места где есть совпадение.
Если упростить preg_match позволяет узнать есть в строке подстрока или нет, а Preg_match_all позволит узнать конкретно места где есть совпадение.
Лично я интуитивно использую preg_match_all чтобы найти все совпадения полагая что all оно и есть all.
А если ищу ограниченное количество совпадений то preg_match
А если ищу ограниченное количество совпадений то preg_match
Похожие вопросы
- Кто объяснит, как сайт публикуют в сеть (чтобы люди могли заходить на него)?
- Объясните простым языком.
- Объясните что за файл php.ini
- Объясните пожалуйста разницу в расставлении круглых скобок в конструкции IF.
- (JS, PHP) Что такое скрипт и чем отличается от других языков?? СПС
- Объясните прицеп работы php как он работает ?
- Для чего нужны побитовые операции в PHP? Объясните мне как можно детальнее, на что хватит духу.
- Объясните мне почему для программиста важна математика. Просто я в свое время этим занимался, пришлось по учебе и работе
- Изучаю php. В книжке дан код программы, объясните для чего строка? (код внутри)
- Объясните пожалуйста что делает этот код???
-------------------
$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);
----------------------