将字符串分解为数组

时间:2010-09-24 11:19:22

标签: php regex split explode

可能很容易做但我似乎无法生成正确的正则表达式。

说我有这个字符串

$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 个答案:

答案 0 :(得分:4)

使用preg_split()为开头标记带有正向前瞻:

print_r(preg_split('/(?=<h2>)/', $string, -1, PREG_SPLIT_NO_EMPTY));

正向前瞻只是告诉正则表达式解析器拆分<h2>周围的文本,但不能删除标记。如果您按/<h2>/分割,则代码会消失,就像您使用explode()分割一样。

答案 1 :(得分:1)

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

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

答案 2 :(得分: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起,这已被弃用。