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

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

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Возможно разобрать BBCodes вложенные друг в друга?

Сообщения:  [1-10]   [11-20] 

 
 автор: MOVe   (17.11.2005 в 17:29)   письмо автору
 
   для: Artem S.   (17.11.2005 в 10:19)
 

Хорошо, спасибо. Если в принципе регами не сделать (по заключению экспертов) :), то напишу обычную функцию! Thx!

   
 
 автор: Artem S.   (17.11.2005 в 10:19)   письмо автору
 
   для: MOVe   (17.11.2005 в 09:37)
 

>> Ещё одна задача... Как выбрать текст по границам тэгов? Но не трогать всё внутри?
Регами тут я ничего сделать не могу. Можно прибегнуть к рекрусии, но тогда между тегами ничего не доложно быть ([ b ][ i ][ code ]111[ /code ][ /i ][ /b ] так а не так [ b][ i ] 123 [ code ]111[ /code ][ /i ][ /b]

Спасти могут строковые функции. Ищем вложения [ b ] [ i ] [ code ] через strpos что раньше встречается min() и меняем по регвыражению что выше.

Со списками помогу, но чуть позже, я занят очень, на выходных.

   
 
 автор: MOVe   (17.11.2005 в 09:37)   письмо автору
 
   для: cheops   (15.11.2005 в 13:45)
 

А со списками мне никто не поможет :cry:?

   
 
 автор: cheops   (15.11.2005 в 13:45)   письмо автору
 
   для: MOVe   (15.11.2005 в 11:46)
 

Скорее всего разумнее разбить текст на части по границам тэгов - произвести замену внутри и объединить результаты.

   
 
 автор: MOVe   (15.11.2005 в 11:46)   письмо автору
 
   для: MOVe   (15.11.2005 в 01:26)
 

Ещё одна задача... Как выбрать текст по границам тэгов? Но не трогать всё внутри?


[codee]
   bold 
  [codee]
    hello
  [/codee]
[/codee]

[codee]
  code tag 2
[/codee]


чтобы это превратилось в:

<div>
  [ b ] bold [ /b ]
  [codee]
    hello
  [/codee]
</div>

<div>
  code tag 2
</div>


В смысле, мне не нужно обработку внутренностей, мне нужно узнать, как мне вытащить тэги code только те, которые являются внешними...

   
 
 автор: MOVe   (15.11.2005 в 01:26)   письмо автору
 
   для: Artem S.   (15.11.2005 в 01:17)
 

Пользователю сложнее запомнить, что нужно ставить звёздочки... Лучше всё же без них. Если конечно код не усложнится... Лучше проверку по \n сделать, чем по [*]. Если не трудно :) Спасибо!

   
 
 автор: Artem S.   (15.11.2005 в 01:17)   письмо автору
 
   для: MOVe   (15.11.2005 в 01:10)
 

Ну на сколько мне не изменяет память bbcode'ы нужно писать так
[list]
[*] запись 1
[*] запись 2
и т.д.
[list]
[*] запись 3
[*] запись 4[/list]
[/list]

Может лучше выбрать этот вариант?

   
 
 автор: MOVe   (15.11.2005 в 01:10)   письмо автору
 
   для: MOVe   (15.11.2005 в 01:01)
 

Боюсь показаться наглым, но всё же :)

Как вы поняли у меня задача сделать поддержку BBcodes на сайте. Есть какие-то более менее простые, но вот некоторые совсем не даются.

Очередной "затык" на списках...
Вот код:

[list]
  запись 1
  запись 2
  и т.д.
  [list]запись 3
    запись 4[/list]
[/list]


Как обработать так, чтобы это всё превратилось в:
<ul>
  <li>запись 1</li>
  <li>запись 2</li>
  <li>и т.д.</li>
    <ul>
      <li>запись 3</li>
      <li>запись 4</li>
    </ul>
</ul>


Сейчас ещё раз по форуму пройдусь, может уже есть такой ответ...
Заранее спасибо!

Да, при помощи обычного скрипта я это делаю детскими методами... А вот регекспами так же не понимаю...

   
 
 автор: MOVe   (15.11.2005 в 01:01)   письмо автору
 
   для: Artem S.   (15.11.2005 в 00:49)
 

Мдаааа... Круто :) Спасибо! Пока не асилил, но буду разбираться.
Куплю немножечко мозгофф... Приоритетно - с пониманием регекспов :)

   
 
 автор: Artem S.   (15.11.2005 в 00:49)   письмо автору
 
   для: MOVe   (15.11.2005 в 00:03)
 

Вот! Новый шаблон. В чем разница можете посмотреть на примере.

<?
$parrent_new
"#\[quote\]((?:(?<!\[/quote\]).(?!\[quote\]))+)\[/quote\]#is";
$parrent_old "#\[quote(=\"[a-z]+\")?\](?!\[quote])(?<!\[/quote\])(.*?)\[/quote\]#si";

$str1 =
'[quote]
  цитата
  [quote]  вложенная цитата[/quote]
  [quote]
    цитата вложенная в цитату
          [quote] 3 уровень вложености [/quote]
  [/quote]
[/quote]'
;
$str2 $str1;
$i 1;
while ( 
preg_match($parrent_old$str1) )
{
    
$str1 preg_replace($parrent_old"<div in=$i>\n$1\n</div end=$i>",  $str1);
    
$i++;
}
$i 1;
while ( 
preg_match($parrent_new$str2) )
{
    
$str2 preg_replace($parrent_new"<div in=$i>\n$1\n</div end=$i>",  $str2);
    
$i++;
}

echo 
"Вариант 1:\n"$str1;
echo 
"\n\n";
echo 
"Вариант 2:\n"$str2;

?>


Вариант 1:
<div in=1>

</div end=1>
  <div in=1>

</div end=1>
  [/quote]
[/quote]

Вариант 2:
<div in=3>
  цитата
  <div in=1>
  вложенная цитата
</div end=1>
  <div in=2>
    цитата вложенная в цитату
          <div in=1>
 3 уровень вложености 
</div end=1>
</div end=2>
</div end=3>


Пользуйтесь =)

   

Сообщения:  [1-10]   [11-20] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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