Forum Webscript.Ru
Программирование => PHP => Тема начата: Daiz13 от 01 Августа 2002, 10:07:12
-
Написал такую ф-ю:
function getTagStr($content, $tag, $b_left="[", $b_right="]", $b_closer="/") {
$b_left = preg_quote ($b_left);
$b_right = preg_quote ($b_right);
$b_closer = preg_quote ($b_closer);
$patern = \'/\'.$b_left.$tag.$b_right.\'(.*)\'.$b_left.$b_closer.$tag.$b_right.\'/siU\';
preg_match ( $patern , $content , $outdata);
return $outdata[1];
}
// пример:
$body = getTagStr($content, "custom", $b_left="@", $b_right="@", $b_closer="")
Пример позволяет получить часть текста заключенную в @custom@.
А как ее переделать чтобы получать масив строк заключенных в произвольные теги?
Тоесть задаем только метки тэгов и ищем все парные тэги.
-
preg_match_all();
-
preg_match_all();
Это итак ясно, проблема в том чтобы найти вхождения всех парных тэгов, а не какого н-дь определенного.
-
Daiz13
я попытался поэксперементировать, немного изменив твою ф-ция - не удалось...
Скорее всего надо писать парсер
-
Ну, так это...
впесто слова $tag надо, наверное, написать .*?
-
RomikChef
допусти текст вот такой:
[tag1]blabla1[tag2]blabla2[/tag2]blabla3[/tag1]
Что в итоге(с твои изменением) получим вот такие элементы массива:
1)blabla1[tag2]blabla2[/tag2]blabla3
2)blabla1[tag2]blabla2
3)blabla1
4)blabla2
5)blabla3
6)blabla2[/tag2]blabla3
Спрашивается: правильно ли?
-
preg_match_all("!\\\\[(.+)\\\\](.*)\\\\[/\\\\\\\\1\\\\]!U", $content, $outdata);
Только это не ищет вложенные теги, их придется выковыривать рекурсией.
-
Во! Уже ближе к телу!
-
Вчера вводил такую фишку на свой форум... Реализовал так:
$msg=preg_replace("/\\[B\\](.*?)\\[\\/B\\]/i", "$1", $msg);
$msg=preg_replace("/\\[I\\](.*?)\\[\\/I\\]/i", "$1", $msg);
Знак "?" борется именно с
[tag1]blabla1[tag2]blabla2[/tag2]blabla3[/tag1]
и такого как blabla1[tag2]blabla2[/tag2]blabla3
не вылетает... И со вложенными тегами работает, без проблем.
-
Вопрос вдогонку, может кто знает...
(.*?)
- это допускает все символы, кроме перевода строки... Как сделать, чтоб допускался перевод строки...
-
там модификатор нужно прописать. Или m или s, точно не помню
-
Макс
Проверил все ок... Как ты и говорил модификатор s ! Спасибо.
-
Вообще-то, если на КАЖДЫЙ тег писать прег реплейс, то, вообще-то, проще будет сделать strtr.
-
Можно и str_replace... Но будет ли он проверять закрытие тега?