|
|
|
| Надо удалить текст из переменной, который находится между двумя тегами. Как такое лучше реализовать?
Пример:
НУЖНЫЙ ТЕКСТ
[начало ненужного текста]
ненужный текст
[конец ненужного текста]
НУЖНЫЙ ТЕКСТ
|
| |
|
|
|
|
|
|
|
для: opex
(29.06.2006 в 14:28)
| |
<?php
// обратные слэши перед квадратными скобками нужно сохранить!
// иначе рег. выражение не будет работать
$open_tag = "\[tag\]"; // открывающий тег
$close_tag = "\[/tag\]"; // закрывающий тег
// в обрабатываемом тексте обратные слэши в тегах не нужны
$text = "Нужный текст [tag]Ненужный текст[/tag] Нужный текст"; // текст
// вырезаем ненужный текст вместе с тегами
$text = preg_replace("(.*)".$open_tag."(.*)".$close_tag."(.*)", "\\1 \\3", $text);
echo $text;
?>
|
| |
|
|
|
|
|
|
|
для: WebTech
(29.06.2006 в 15:26)
| | Объясните, пожалуйста, что значит \\1 и \\3.
PHP выдает ошибку:
Unknown modifier '< | |
|
|
|
|
|
|
|
для: opex
(29.06.2006 в 15:51)
| | Очень сильно прошу прощения, я не ограничил регулярное выражение.
Исправьте, пожалуйста строку с preg_replace так:
$text = preg_replace("%(.*)".$open_tag."(.*)".$close_tag."(.*)%", "\\1 \\3", $text);
|
\\1 и \\3 обозначают обратные ссылки на подшаблоны в регулярном выражении. В нашем выражении три подшаблона, второй обозначает ненужный текст, поэтому используем только ссылки на 1 и 3 подшаблоны. | |
|
|
|
|
|
|
|
для: WebTech
(29.06.2006 в 18:43)
| | Огромное спасибо, похоже что работает! | |
|
|
|
|
|
|
|
для: opex
(30.06.2006 в 08:08)
| | Прошу прощения, но я ошибся: не работает! | |
|
|
|
|
|
|
|
для: opex
(03.07.2006 в 14:01)
| | Что не работает? При каких значениях переменных $open_tag, $close_tag и $text не работает? | |
|
|
|
|
|
|
|
для: WebTech
(03.07.2006 в 15:40)
| | $open_tag, равен $close_tag и равны <!--НЕ УДАЛЯТЬ!!!!!-->
Почему-то выдает полный текст и ничего не удаляет. | |
|
|
|
|
|
|
|
для: opex
(03.07.2006 в 16:26)
| | Если у вас много тегов в одном тексте, т.е. много вырезаемых кусочков ненужного текста, то открывающий и закрывающий теги должны быть разными.
Лучше использовать теги типа [del] [/del]
И надо немного модифицировать preg_replace()
preg_replace("%".$open_tag."(.*)".$close_tag."%i", " ", $text);
|
Попробуйте так. | |
|
|
|
|
|
|
|
для: WebTech
(04.07.2006 в 11:54)
| | Я не могу использовать другие тэги, только эти одинаковые. Все-равно ничего не вырезает между ними. | |
|
|
|
|
|
|
|
для: opex
(05.07.2006 в 20:04)
| | Проблема решена, спасибо за участие. | |
|
|
|
|
|
|
|
для: opex
(06.07.2006 в 07:03)
| | Если не секрет, как решили? Поделитесь... | |
|
|
|
|
|
|
|
для: WebTech
(06.07.2006 в 14:53)
| | Вот так:
$text= preg_replace('/<!--НЕ УДАЛЯТЬ!!!!!-->(.*)<!--НЕ УДАЛЯТЬ!!!!!-->/Usi','',$text);
|
| |
|
|
|