我在将文本转换为列表方面遇到了一些麻烦。情况是我从数据库中得到如下文字:
"Hello, my name is michael, my hobbys are:
- computers
- guitar
and some more blabla "
不,我想将列出的点(本例中的计算机和吉他)转换为无序的html列表,因此结果应该如下所示:
"Hello, my name is michael, my hobbys are:
<ul>
<li>computers<li>
<li>guitar</li>
</ul>
and some more blabla ".
我认为最好的解决方案是通过正则表达式来做到这一点,但我的知识并不足以实现这一点。我通过替换所有/\n- /
宽度<li>
标记来尝试它。但是,我如何得到结束</li>
,对我来说更加困惑,如何获得两个<ul>
标签?
提前感谢您的任何建议。
答案 0 :(得分:5)
您的语法与Markdown几乎完全相同,后者是一种简单的标记语言。唯一的区别是一点空白:
Hello, my name is Michael, my hobbies are:
- Computers
- Guitar
and some more blabla
它已转换为:
<p>Hello, my name is Michael, my hobbies are:</p>
<ul>
<li>Computers</li>
<li>Guitar</li>
</ul>
<p>and some more blabla</p>
我认为有一些PHP Markdown项目会让您觉得有用。
答案 1 :(得分:0)
有很多方法可以做到这一点,包括正则表达式,但在特定情况下,explode()函数应该足够了。你可以这样做:
$array = explode("\n", $string);
现在你的$数组将在第一个插槽中显示“Hello,my name is michael,my hobbys are:”,第二个插槽中包含“ - computers”等等。
然后遍历数组,对于以“ - ”开头的每个元素,将其转换为&lt; li&gt;元素&lt; / li&gt;
这是一种非常普遍的方式,但它应该是高效的,不需要使用正则表达式。
答案 2 :(得分:-1)
不幸的是,最好做正则表达式