将文本转换为列表

时间:2013-01-08 14:12:37

标签: php html regex list

我在将文本转换为列表方面遇到了一些麻烦。情况是我从数据库中得到如下文字:

"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>标签?

提前感谢您的任何建议。

3 个答案:

答案 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)

不幸的是,最好做正则表达式