Версия для печати. Взято с сайта phpsql.ru

На главную   Назад   Вперед

Использование регулярных выражений

В РНР есть несколько функций для работы с регулярными выражениями. Самые простые сообщают вам, есть ли совпадения с заданными выражениями, и сообщают позиции этих совпадений. Давайте начнем с функции preg_match (), которая находит единственное совпадение:

<?php
$s = ’blah<a href="a.php">blah</a><a href="b.php">blah</a>’; 
if (preg__match(’/<as+[^>]*href=”[^"]+”/i’  $s,  $matches) )   { 
print "match:  $matches[0]"; }
?>
Здесь мы проверяем строку на соответствие предыдущему регулярному выражению. Функции preg_match () нужно передать как минимум два аргумента: выражение и строку, в которой мы будем искать совпадения. Допол-ительный аргумент $matches позволяет поместить первую совпавшую подстроку в массив $matches. В этом случае в массиве $matches будет только один элемент, доступный matches [ 0 ].

Давайте немного изменим наш пример. Что делать, если вы хотите видеть только саму ссылку, а не все предшествующие ей символы? Вы можете использовать группировку в вашем выражении, чтобы разграничить часть, которую вы хотите видеть:

preg_match(“/<as+[^>]*href="([a"]+)"/i”,  $s,  $matches);
С помощью круглых скобок мы указываем группировку вокруг [^ " ] +. Теперь, если имеется соответствие, $matches [ 0 ] все еще содержит полную строку соответствия, но $matches [1] содержит соответствие внутри первой группировки (в этом случае а. php). Если бы имелось большее количество группировок, они были бы упомянуты с $matches [ 2 ], $matches [ 3 ] и так далее.

Сейчас, возможно, было бы благоразумно напомнить вам о функции $print_r(), которая выводит полное содержание массива. Это действительно полезно, когда вы хотите знать, как работает массив совпадений.

Извлечение всех совпадений

Для извлечения всех совпадений регулярному выражению используйте функцию preg_match_all (). Эта функция работает, как и preg_match (), но структура массива совпадений немного иная, кроме этого функция возвращает число найденных совпадений. Предположим, что вы используете массив $matches и у нас есть та же группировка, что и в предыдущем пункте. Теперь $matches [0] соответствует первому набору совпадений, то есть $matches [ 0 ] [ 0 ] - строка совпадений, a $matches [ 0 ] [ 1 ] - строка, сов-павшая внутри группы (a.php). Массив $matches [1] - массив с такой же структурой, которая соответствует следующему совпадению, поэтому $matches [ 1 ] [ 1 ] - b. php в нашем примере.

Если вы добавляете параметр PREG_OFFSET_CAPTURE, он заменяет все строки в массиве соответствий с другим уровнем массивов, так же как в случае с preg_match (). Снова вспомните о print_r (), она здесь неоценима.

 
Предыдущая   На главную   Следующая