使用PHP preg_replace将文本转换为列表

时间:2015-05-06 16:15:55

标签: php regex

我有一个像这样的字符串

High Resolution: Yes, Very Useful: Yes, Compatible Browsers: IE9, IE10, IE11, Firefox, Safari, Opera, Chrome  

我想让它看起来像

<li>High Resolution: Yes</li>
<li>Very USeful: Yes</li>
<li>Compatible Browsers: IE9, IE10, IE11, Firefox, Safari, Opera, Chrome</li>

是否有任何正则表达式可以实现此目的,我尝试将,替换为</li><li>,但这在最后一行中无济于事。

UPDATE:字符串实际上没有新行。

4 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式:

^(.*?),?$

并替换为:

<li>$1</li>

Sample

编辑:如果没有新行,我担心强大的解决方案是不可能的,但你可以破解这样的事情(Sample):

(\w+\s\w+:[^:]*)(, |$)

如果您可以对输入做出一些假设

答案 1 :(得分:0)

$formatted = "<li>" . str_replace (",\n", "</li><li>", $stringSrc) . "</li>";

答案 2 :(得分:0)

如果您想继续使用当前的方法,即将,替换为</li><li>,那么您可以执行以下操作来修复开始和结束:

$string = '<li>' . $string . '</li>'

答案 3 :(得分:0)

如果您要使用逗号 分隔您的子列表项,也可以使用逗号以外的其他内容来分隔您的列表项,例如:

$input = "High Resolution: Yes; Very Useful: Yes; Compatible Browsers: IE9, IE10, IE11, Firefox, Safari, Opera, Chrome"

然后:

echo implode("\n",
    array_map(
        function($a){
            return sprintf('<li>%s</li>', trim($a));
        },
        explode(';', $input)
    )
);

可能看起来令人生畏,但技术上只有一行代码,比正则表达式更有效率,并且当你的正则表达式脱离轨道时不会让你疯狂没有明显的理由。