在preg_replace()函数中循环遍历ol标记

时间:2015-12-13 02:06:21

标签: php

我正在尝试用html ol标签替换代码的新行,以将代码显示为

1. Line 1
2. Line 2
3. Line 3
4. Line 4

这是我的php

$x="Line 1
      Line 2
      Line 3
      Line 4";

 echo preg_replace("/\n+([^\n]+)/","<ol start='1'><li>$1</li></ol>",$x);

问题是ol标签没有在preg_replace()函数中循环,所以输出

1. Line 1
1. Line 2
1. Line 3
1. Line 4

代码有什么问题?

2 个答案:

答案 0 :(得分:2)

您正在创建多个ol标记,而不是围绕ol函数包裹preg_replace。您还可以使用m modifier

简化正则表达式
$x="Line 1 
      Line 2 
      Line 3 
      Line 4";

echo "<ol start='1'>" . preg_replace("/^(.*?)$/m", "<li>$1</li>", $x) . "</ol>";

如果您不希望使用尾随换行符,请选择:

/^(.*?)\s?$/m
  

当设置此修饰符时,“行首”和“行尾”构造分别在主题字符串中的任何换行符之后或之前立即匹配,以及在开始和结束时匹配。这相当于Perl的/ m修饰符。

来源:php.net

答案 1 :(得分:1)

保持在替换<ol start='1'>之外,因为它必须只在生成的html中出现一次

echo "<ol start='1'>".preg_replace("/\n+([^\n]+)/","<li>$1</li>",$x)."</ol>";