|
|
|
| подскажите пожалуйста как использую одну из встроенных функций PHP.. заменить текст
имею текст:
#1 тест тест тест
#тест тет тест 2
#3 тест тест тест
afaf
adfadf
adfadf
|
в итоге хочу получить:
<ul>
<li>1 тест тест тест</li>
<li>тест тет тест 2</li>
<li>3 тест тест тест</li>
</ul>
afaf
adfadf
adfadf | |
|
|
|
|
|
|
|
для: 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>. | |
|
|
|
|
|
|
|
для: cheops
(22.11.2011 в 20:59)
| | проблема в том, что мне нужно это сделат одной функцией встроенное, можно ли это сделать одним preg_replace?
пусть я даже обрамлю их в [list][/list] ? | |
|
|
|
|
|
|
|
для: sidPR
(23.11.2011 в 10:36)
| | Хм... сложновато будет... а почему такое ограничение? Дело в классе происходит (в случае чего preg_replace_callback и статический метод класса съест)? | |
|
|
|
|
|
|
|
для: 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);
?>
|
| |
|
|
|
|
|
|
|
для: duhon
(23.11.2011 в 12:23)
| | тут получается две функции, не подойдет :( | |
|
|
|
|
|
|
|
для: sidPR
(23.11.2011 в 12:40)
| | вредный ты
$text = preg_replace('%\[list\](.*?)\[/list\]%se', "'<ul>'.preg_replace('/\\#(.*)/', '<li>\\\\1</li>', \"\\1\").'</ul>'", $text);
|
пробуй | |
|
|
|
|
|
|
|
для: duhon
(23.11.2011 в 13:54)
| | Спасибо большое. | |
|
|
|