如何将preg_split用于br标记

时间:2018-01-28 12:06:18

标签: php parsing

以下代码未解析<br>代码效果

$html="test<br>end";

preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);

如何使用它进行换行?

编辑:

要求的结果是:

0 => 'test', 1 => 'end'

2 个答案:

答案 0 :(得分:1)

您的示例输入字符串不需要正则表达式。

$html="test<br>end";
var_export(explode('<br>',$html));

输出:

array (
  0 => 'test',
  1 => 'end',
)

如果您要替换:请使用str_replace()

$html="test<br>end";
var_export(str_replace('<br>',"\n",$html));

输出:

'test
end'

如果你坚持使用preg_split(),那么这就是我的建议:

$html="test<br>end";
var_export(preg_split('/<[^>]*>/',$html));

否定字符类的运行速度比.(任何非换行符)快。请注意,这会匹配字符串中的所有标记(以及<>之间的任何其他标记。)

...

如果我们仅定位<br><br />,那么模式可以是:~<br(?: /)?>~。但现在我争先恐后地猜测问题是什么,因为重要问题没有得到解答。

答案 1 :(得分:0)

假设您还要按任何其他标记拆分,并且您的文字可能包含非拉丁字符,我建议:

  • 使用unicode修饰符(小写u),因此这适用于多字节(非ASCII)字符。
  • 我个人认为使用大写U只会导致误解。将其保留,同时将(.*)更改为(.*?)以获得相同的效果。
  • 由于您不希望在结果数组中看到<br>,因此您需要删除PREG_SPLIT_DELIM_CAPTURE标记,这实际上会强制<br>进入结果。

所以应用所有这些,我们得到:

$html="test<br>end";

$result = preg_split('/<(.*?)>/u', $html);

print_r($result); // Array( [0] => "test", [1] => "end" )