我有一个像这样的字符串
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:字符串实际上没有新行。
答案 0 :(得分:1)
您可以使用以下正则表达式:
^(.*?),?$
并替换为:
<li>$1</li>
编辑:如果没有新行,我担心强大的解决方案是不可能的,但你可以破解这样的事情(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)
)
);
可能看起来令人生畏,但技术上只有一行代码,比正则表达式更有效率,并且当你的正则表达式脱离轨道时不会让你疯狂没有明显的理由。