Ul标签。如何使用Regex识别列表的开头和结尾

时间:2017-03-30 14:32:53

标签: php regex markdown

我在数据库中有很多不同的博客帖子。他们正在降价。我想将它们转换为html。我的ul标签有问题。

例如,以简化的方式,我有:

Something
- First
- Second
Something else

Second ul
- First
- Second
Some final text

我可以把li标签:

$text = preg_replace("/^- (.*)/m", "<li>$1</li>", $text);

但是如何确定列表的开头或结尾以放置ul标签?

我想要这个结果:

Something
<ul>
<li>- First</li>
<li>- Second</li>
</ul>
Something else

Second ul
<ul>
<li>- First</li>
<li>- Second</li>
</ul>
Some final text

1 个答案:

答案 0 :(得分:0)

你需要两次通过,所以有两个preg_replace来电:

$text = preg_replace("/^- (.*)/m", "<li>$1</li>", 
            preg_replace("/^- .*(\R- .*)*/m", "<ul>\n$0\n</ul>", $text)
        );

内部首先执行,然后查找以-开头的行,并捕获所有以-开头的行,直到后面的行未启动-

.*匹配当前行末尾的所有内容。新行字符与.不匹配。因此,下一个\R用于匹配任何被视为换行序列的内容。然后再次进行连字符检查,并捕获该行的其余部分。这可以重复(( ... )*)尽可能多次。

然后将匹配的块包装在ul标记中。在此阶段不会删除连字符。

外部标记将在-标记中包含以li开头的行,取出-