Нужна помощь с регулярными выражениями для вычленения парных тег
настроение:Задумчивое
Метки: регулярные выражения, парные тэги
![]() |
|

Максим Пак
29-04-2011 16:12 (ссылка)
Часто в веб-приложениях встречается задача извлечения текста из HTML-страницы. В предыдущем разделе были рассмотрены приемы извлечения параметров из тегов и
Название страницы
Текст в абзаце
текст без абзаца";$patern="#<[\s]*title[\s]*>([^<]*)<[\s]*/title[\s]*>#i";
if(preg_match($patern, $text, $matches)) echo $matches[1];
else echo "Ничего не найдено";
?>
В окне веб-браузера это будет выглядеть ТАК.
Точно так же можно извлечь информацию из других тегов, например, текст между тегами
и
можно извлечь при помощи следующего скрипта:Название страницы
Текст в абзаце
текст без абзаца";$patern="#<[\s]*p[\s]*>([^<]*)<[\s]*/p[\s]*>#i";
if(preg_match($patern, $text, $matches)) echo $matches[1];
else echo "Ничего не найдено";
?>
В окне веб-браузера это будет выглядеть ТАК.
Замена прямых кавычек на парные
Еще одна распространенная задача — преобразование прямых кавычек (") на парные кавычки ("и"). Эту задачу решает следующий скрипт:
В окне веб-браузера это будет выглядеть ТАК.
Подстановка с использованием собственных тегов форматирования
Часто требуется использование своих собственных тегов, которые могут приобретать довольно сложную форму. Например, пусть в тексте присутствуют теги, имещие следующий синтаксис:
[d]2D5+8[\d]
Данный тег применяется в ряде ролевых интернет-игр. Необходимо извлеч из тега все три числа и получить по ним результат, который вычисляется по следующему алгоритму:
$sum=0;
for($i=0; $i<2; $i++) $sum=$sum+rand(1,5);//случайное число от 1 до 5
$sum=$sum+8;
Данную задачу удобно решать при помощи функции preg_replace_callback().
Пример:
В данном примере используется функция обратного вызова summ_number(), имя которой передается в качестве второго аргумента функции preg_replace_callback(). Функция принимает массив с результатами поиска и осуществляет вычисления, возвращая строку с результатом, который подставляется вместо найденной подстроки.