将字符串拆分为数组

3
可能很容易做,但我似乎无法产生正确的正则表达式。
假设我有这个字符串。
$string = '<h2>Header 1</h2><p>ahs da sdka dshk asd haks</p><img src="http://dummyimage.com/100x100/" width="100" height="100" alt="Alt" /><h2>Header 2</h2><p>asdkhas daksdha kd ahs</p><em>Lame</em><p>trhkbasd akhsd ka dkhas</p><h2>Header 3</h2><p>ajdas ahkds hakd</p>';

我需要它像这样。
$array[0] = '<h2>Header 1</h2><p>ahs da sdka dshk asd haks</p><img src="http://dummyimage.com/100x100/" width="100" height="100" alt="Alt" />';
$array[1] = '<h2>Header 2</h2><p>asdkhas daksdha kd ahs</p><em>Lame</em><p>trhkbasd akhsd ka dkhas</p>';
$array[2] = '<h2>Header 3</h2><p>ajdas ahkds hakd</p>';

“如果我的字符串包含更多的H2块,则继续进行操作。”“因此,拆分点在于H2,并且需要保留HTML标记。有什么建议吗?”
3个回答

4
使用带有正向先行断言的 preg_split() 函数来匹配开标签:
print_r(preg_split('/(?=<h2>)/', $string, -1, PREG_SPLIT_NO_EMPTY));

正向预查仅告诉正则表达式解析器分割围绕<h2>的文本,但不消除标记。 如果您使用/<h2>/进行分割,则标记会消失,就像使用explode()一样。

这个解决了问题。而且我使用的是 PHP 5.3.0,所以不能用 split()。 - Vincent Schwidder

1
$result = split('(?=<h2>)', $string);

或者

$result = preg_split('/(?=<h2>)/', $string);

1
split()已被弃用,推荐使用preg_split()。但是这仍然是一个有效的答案。 - BoltClock

0
$string = '<h2>Header 1</h2><p>ahs da sdka dshk asd haks</p><img src="http://dummyimage.com/100x100/" width="100" height="100" alt="Alt" /><h2>Header 2</h2><p>asdkhas daksdha kd ahs</p><em>Lame</em><p>trhkbasd akhsd ka dkhas</p><h2>Header 3</h2><p>ajdas ahkds hakd</p>';

$matches    = split('<h2>', $string);

print_r($matches);

虽然这在 PHP 5.3.0 中已被弃用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接