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

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

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

 

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

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

тема: заменить строку на список
 
 автор: sidPR   (22.11.2011 в 19:51)   письмо автору
 
 

подскажите пожалуйста как использую одну из встроенных функций PHP.. заменить текст

имею текст:


#1 тест тест тест
#тест тет тест 2
#3 тест тест тест

afaf
adfadf
adfadf


в итоге хочу получить:
<ul>
<li>1 тест тест тест</li>
<li>тест тет тест 2</li>
<li>3 тест тест тест</li>
</ul>
afaf
adfadf
adfadf

  Ответить  
 
 автор: cheops   (22.11.2011 в 20:59)   письмо автору
 
   для: sidPR   (22.11.2011 в 19:51)
 

Хм... вот если бы список был обрамлен какими-то дополнительными тэгами, например [list][/list]
[list]#1 тест тест тест 
#тест тет тест 2 
#3 тест тест тест[/list]

afaf 
adfadf 
adfadf
тогда можно было бы воспользоваться решением вида
<?php
  $text 
"[list]#1 тест тест тест 
#тест тет тест 2 
#3 тест тест тест
[/list]

afaf 
adfadf 
adfadf"
;
  
$pattern "#\[list\](.+?)\[\/list\]#si";
  echo 
preg_replace_callback($pattern,
             
"list_replace",
              
$text);
  function 
list_replace($matches)
  {
    
$matches[1] = preg_replace("|[\r\n]+|",'',$matches[1]);
    
$pattern "|#([^#]+)|si";
    
$matches[1] = preg_replace($pattern
                             
'<li>\\1</li>'
                             
$matches[1]);
    return 
"<ul>$matches[1]</ul>";
  }
?>
А так скорее всего придется переводить строку вида #что-то в <li>что-то</li>, а потом уже добавлять <ul> и </ul>.

  Ответить  
 
 автор: sidPR   (23.11.2011 в 10:36)   письмо автору
 
   для: cheops   (22.11.2011 в 20:59)
 

проблема в том, что мне нужно это сделат одной функцией встроенное, можно ли это сделать одним preg_replace?

пусть я даже обрамлю их в [list][/list] ?

  Ответить  
 
 автор: cheops   (23.11.2011 в 10:57)   письмо автору
 
   для: sidPR   (23.11.2011 в 10:36)
 

Хм... сложновато будет... а почему такое ограничение? Дело в классе происходит (в случае чего preg_replace_callback и статический метод класса съест)?

  Ответить  
 
 автор: duhon   (23.11.2011 в 12:23)   письмо автору
 
   для: sidPR   (22.11.2011 в 19:51)
 

а такой вариант подходит? если у тебя php 5.3
<?php
$text 
"[list]#1 тест тест тест  
#тест тет тест 2 
#3 тест тест тест
[/list]

afaf 
adfadf 
adfadf"

$text preg_replace_callback('%\[list\](.*?)\[/list\]%s', function($ul){
    return 
'<ul>' preg_replace('/\#(.*)/''<li>$1</li>'$ul[1]). '</ul>';
}, 
$text);
?>

  Ответить  
 
 автор: sidPR   (23.11.2011 в 12:40)   письмо автору
 
   для: duhon   (23.11.2011 в 12:23)
 

тут получается две функции, не подойдет :(

  Ответить  
 
 автор: duhon   (23.11.2011 в 13:54)   письмо автору
 
   для: sidPR   (23.11.2011 в 12:40)
 

вредный ты
$text = preg_replace('%\[list\](.*?)\[/list\]%se', "'<ul>'.preg_replace('/\\#(.*)/', '<li>\\\\1</li>', \"\\1\").'</ul>'", $text);

пробуй

  Ответить  
 
 автор: sidPR   (23.11.2011 в 15:02)   письмо автору
 
   для: duhon   (23.11.2011 в 13:54)
 

Спасибо большое.

  Ответить  
Rambler's Top100
вверх

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