PHP preg_match и preg_match_all функции - PullRequest
36 голосов
/ 03 ноября 2010

Я хотел бы знать, что делают функции preg_match и preg_match_all и как их использовать.

Ответы [ 4 ]

102 голосов
/ 04 ноября 2013

preg_match перестает смотреть после первого матча. preg_match_all, с другой стороны, продолжает поиск, пока не завершит обработку всей строки. Когда совпадение найдено, он использует остаток строки, чтобы попытаться применить другое совпадение.

http://php.net/manual/en/function.preg-match-all.php

11 голосов
/ 20 мая 2016

Обе функции preg_match и preg_match_all в PHP используют Perl-совместимые регулярные выражения.

Вы можете посмотреть эту серию, чтобы полностью понять Perl-совместимые регулярные выражения: https://www.youtube.com/watch?v=GVZOJ1rEnUg&list=PLfdtiltiRHWGRPyPMGuLPWuiWgEI9Kp1w

preg_match ($ pattern, $ subject, & $ match, $ flags, $ offset)

Функция preg_match используется для поиска конкретной $pattern в строке $subject, и когда образец обнаруживается в первый раз, он прекращает его поиск. Он выводит совпадения в $matches, где $matches[0] будет содержать текст, который соответствует полному шаблону, $matches[1] будет иметь текст, который соответствует первому захваченному скобочному подэлементу, и так далее.

Пример preg_match()

<?php
preg_match(
    "|<[^>]+>(.*)</[^>]+>|U",
    "<b>example: </b><div align=left>this is a test</div>",
    $matches
);

var_dump($matches);

Вывод:

array(2) {
  [0]=>
  string(16) "<b>example: </b>"
  [1]=>
  string(9) "example: "
}

preg_match_all ($ pattern, $ subject, & $ match, $ flags)

Функция preg_match_all ищет все совпадения в строке и выводит их в многомерный массив ($matches), упорядоченный в соответствии с $flags. Когда значение $flags не передается, он упорядочивает результаты так, что $matches[0] - это массив полных совпадений с образцом, $matches[1] - это массив строк, сопоставленных с первым подшаблоном в скобках, и т. Д.

Пример preg_match_all()

<?php
preg_match_all(
    "|<[^>]+>(.*)</[^>]+>|U",
    "<b>example: </b><div align=left>this is a test</div>",
    $matches
);

var_dump($matches);

Выход:

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"
  }
}
4 голосов
/ 18 мая 2016

Конкретный пример:

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
)
0 голосов
/ 03 ноября 2010

Руководство по PHP может вам помочь.

Дайте нам знать, если у вас возникли проблемы с пониманием.

...