我使用以下代码格式化文本字符串并将其放在<div></div>
标记内。
<?php
$errors = '::This is line 1 ';
$errors .= '::This is line 2 ';
$errors = preg_replace('#::(.+?)\s*(?=::|$)#','<li>$1</li>',$errors);
echo ($errors);
?>
这样做会取$errors
字符串,并将其转换为<li>This is line 1</li><li>This is line 2</li>
,删除每个字符串前的::
,并修剪尾随空格。
我尝试将>>
添加到每个结果的开头,因此它会<li>>>This is line 1</li><li>>>This is line 2</li>
我想到的一种方法是在>>
preg_replace
$errors = preg_replace('#::(.+?)\s*(?=::|$)#','<li>>>$1</li>',$errors);
哪个有效,但有没有办法在正则表达式本身的第一部分进行呢?
'#::(.+?)\s*(?=::|$)#'
我确实尝试过很多方法来调整regex
,但最终得到了各种奇怪的结果。
答案 0 :(得分:0)
怎么样!
<?php
$errors = '::This is line 1 ';
$errors .= '::This is line 2 ';
$errors = str_replace("::","::>>" ,$errors);
$errors = preg_replace('#::(.+?)\s*(?=::|$)#','<li>$1</li>',$errors);
echo ($errors);
?>
答案 1 :(得分:0)
首先,您的解决方案没有任何问题(直接在函数中替换它)。另一种方法是使用preg_replace_callback()
,您可以在其中提供其他功能
这是一个例子(为此目的 - 有点矫枉过正,但你明白了):
<?php
$errors = '::This is line 1 ';
$errors .= '::This is line 2 ';
$regex = '#::(.+?)\s*(?=::|$)#';
$errors = preg_replace_callback($regex,
// obviously, much more could be done here
function($match) {
$prefix = ">>";
return "<li>{$prefix}{$match[1]}</li>";
},
$errors);
echo ($errors);
// output: <li>>>This is line 1</li><li>>>This is line 2</li>
?>