这是我到目前为止所做的:
<?php
$text = preg_replace('/((\*) (.*?)\n)+/', 'awesome_code_goes_here', $text);
?>
我成功匹配纯文本列表的格式为:
* list item 1
* list item 2
我想用以下代码替换它:
<ul>
<li>list item 1</li>
<li>list item 2</li>
</ul>
我无法理解<ul>
并绕过<li>
!有人可以帮忙吗?
编辑:解决方案如下所示......
我的代码现在写着:
$text = preg_replace('/\* (.*?)\n/', '<ul><li>$1</li></ul>', $text);
$text = preg_replace('/<\/ul><ul>/', '', $text);
那就做到了!
答案 0 :(得分:3)
一种选择是简单地用<ul><li>list item X</li></ul>
替换每个列表项,然后运行第二次替换,它将替换任何</ul><ul>
。
答案 1 :(得分:2)
我知道这是一个老帖子 - 但它需要一个解决方案。试试这个! :)
$text = preg_replace("/\[ul\](.*)\[\/ul\]/Usi", "<ul>\\1</ul>", $text);
$text = preg_replace("/\[li\](.*)\[\/li\]/Usi", "<li>\\1</li>", $text);
答案 2 :(得分:0)
我不是正则表达式的专家,但你想要做的就是匹配你所拥有的模式,并通过用()的方式包围所需的模式将其捕获到反向引用中。然后,您可以在“令人敬畏的代码部分”
中放置1美元(用于第一个反向引用,依此类推) 如果您需要更多,Regex buddy有一个非常非常棒的正则表达式教程
答案 3 :(得分:0)
您可以使用preg_match_all匹配所有项目,然后在ul和li标签内重写它们。
答案 4 :(得分:0)
我认为这就是你想要的
<?php
$text = <<<TEXT
* item
* item
TEXT;
$html = preg_replace( "/^\\* (.*)$/m", "<li>\\1</li>", $text );
echo '<ul>', $html, '</ul>';