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 标记。任何指针?

4

3 回答 3

4

preg_split()对开始标签使用积极的前瞻:

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

积极的前瞻只是告诉正则表达式解析器拆分周围的文本<h2>,但不消除标记。如果你用 分割/<h2>/,标签就会消失,就像你用 分割一样explode()

于 2010-09-24T11:30:45.883 回答
1
$result = split('(?=<h2>)', $string);

或者

$result = preg_split('/(?=<h2>)/', $string);
于 2010-09-24T11:26:03.130 回答
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 开始,这已被弃用。

于 2010-09-24T11:28:57.713 回答