Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите составть регулярное выражение для разбора [quote]
 
 автор: Art   (23.09.2005 в 11:22)   письмо автору
 
 

есть текст
"[quote='Арт']блаблабла[quote='Пола']трутрутру[/quote]бумбум[/quote]кукареку"

надо превратить в

"[quote]<b>Арт написал:</b>\nблаблабла[quote]<b>Пола написал:</b>\nтрутрутру[/quote]бумбум[/quote]кукареку"

т.е. заменить [quote='какой-то_текст'] на [quote]<b>какой-то_текст написал:</b>\n

   
 
 автор: cheops   (23.09.2005 в 14:38)   письмо автору
 
   для: Art   (23.09.2005 в 11:22)
 

Чего-то не могу сообразить как обойти такой казус, как обработка вложенных тэгов - если воспользуетесь моим решением, придётся вычислять число тэгов [quote=] в тексте и выполнять столько же раз функцию preg_replace следующего содержания
<?php
  $text 
"[quote='Арт']блаблабла[quote='Пола']трутрутру[/quote]бумбум[/quote]кукареку";
  
$pattern "|\[quote='([^']+)'\](.+)\[/quote\]|i";
  
$replacement "[quote]<b>\$1 написал:</b>\n\$2[/quote]";
  
$text preg_replace($pattern$replacement$text);
  
$text preg_replace($pattern$replacement$text);
  echo 
$text;
?>

Здесь двойное вложение - поэтому и функция выполняется два раза...

   
 
 автор: Art   (23.09.2005 в 15:29)   письмо автору
 
   для: cheops   (23.09.2005 в 14:38)
 

Спасибо, но в том то и дело, что число тегов заранее не известно, т.е. вложенность их произвольная.

   
 
 автор: cheops   (23.09.2005 в 15:40)   письмо автору
 
   для: Art   (23.09.2005 в 15:29)
 

А это какая система (форум, CMS)? Много тэгов в тексте? Дело в том, что можно досчитать число вхождений фрагмента [quote=' при помощи функции substr_count()
<?php
  $text 
"[quote='Арт']блаблабла[quote='Пола']трутрутру[/quote]бумбум[/quote]кукареку";
  
// Подсчитываем число тэгов в строке
  
$number substr_count($text,"[quote='");
  
// Осуществляем замену
  
$pattern "|\[quote='([^']+)'\](.+)\[/quote\]|i";
  
$replacement "[quote]<b>\$1 написал:</b>\n\$2[/quote]";
  for(
$i 0$i $number$i++) $text preg_replace($pattern$replacement$text);
  echo 
$text;
?>

Может и не самое изящное решение, зато работает...

   
 
 автор: Art   (23.09.2005 в 15:43)   письмо автору
 
   для: cheops   (23.09.2005 в 15:40)
 

В принципе наверно пойдет, спасибо.
Это конвертация одного форума в другой.

   
 
 автор: Art   (23.09.2005 в 16:26)   письмо автору
 
   для: cheops   (23.09.2005 в 15:40)
 

Вылезла небольшая проблема, т.к. тип $text - blob, то если в тексте встречаются переводы строки, то замены не происходит. Что можно сделать?

   
 
 автор: cheops   (23.09.2005 в 23:35)   письмо автору
 
   для: Art   (23.09.2005 в 16:26)
 

В регулярное выражение следует добавить модификатор s
<?php 
  $text 
"[quote='Арт']блаблабла[quote='Пола']трутрутру[/quote]бумбум[/quote]кукареку"
  
// Подсчитываем число тэгов в строке 
  
$number substr_count($text,"[quote='"); 
  
// Осуществляем замену 
  
$pattern "|\[quote='([^']+)'\](.+)\[/quote\]|is"
  
$replacement "[quote]<b>\$1 написал:</b>\n\$2[/quote]"
  for(
$i 0$i $number$i++) $text preg_replace($pattern$replacement$text); 
  echo 
$text
?>

   
 
 автор: Art   (24.09.2005 в 21:54)   письмо автору
 
   для: cheops   (23.09.2005 в 23:35)
 

Огромное спасибо!!! Все получилось!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования