我在数据库中有很多不同的博客帖子。他们正在降价。我想将它们转换为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
答案 0 :(得分:0)
你需要两次通过,所以有两个preg_replace
来电:
$text = preg_replace("/^- (.*)/m", "<li>$1</li>",
preg_replace("/^- .*(\R- .*)*/m", "<ul>\n$0\n</ul>", $text)
);
内部首先执行,然后查找以-
开头的行,并捕获所有以-
开头的行,直到后面的行未启动-
。
.*
匹配当前行末尾的所有内容。新行字符与.
不匹配。因此,下一个\R
用于匹配任何被视为换行序列的内容。然后再次进行连字符检查,并捕获该行的其余部分。这可以重复(( ... )*
)尽可能多次。
然后将匹配的块包装在ul
标记中。在此阶段不会删除连字符。
外部标记将在-
标记中包含以li
开头的行,取出-
。