some content
<h2>title 1</h2>
<p>more content</p>
<h2>title 2</h2>
rest of the content
我需要通过<h2></h2>
将其拆分为关联数组,同时保留字符串的所有内容。
array(){
'text1' => 'some content',
'title1' => 'title 1',
'text2' => '<p>more content</p>',
'title2' => 'title 2',
'text3' => 'rest of the content'
}
或
array(){
[0] => {
'text' => 'some content',
'title' => 'title 1'
},
[1] => {
'text' => '<p>more content</p>',
'title' => 'title 2'
},
[2] => {
'text' => 'rest of the content'
}
}
preg_split()
的 PREG_SPLIT_DELIM_CAPTURE
几乎完成了这项工作,但它输出了索引数组。
我尝试使用正则表达式,但无法捕获 text3 :
(.*?)(<h2.*?<\/h2>)
非常感谢任何帮助或想法。
答案 0 :(得分:0)
你应该能够进行正则表达式分割:
preg_split ("/<\/?h2>/", sampletext)
这里的sampletext看起来就像你的输入示例。我们可以假设每2个拆分相当于一个<h2></h2>
对,因此您可以根据它们的数组索引对它们进行标记。
答案 1 :(得分:0)
我快速为您提供了一个功能,它只是对您的内容进行了测试,但它可能会对您有所帮助。
<?php
function splitTitlesAndContent($needle1,$needle2,$content){
$spli = explode($needle1,$content);
$arr = array();
$titlenum = 1;
$contentnum = 1;
foreach($spli as $spl){
$expl = explode($needle2,$spl);
if(isset($expl[1])){
$arr['title' . $titlenum] = trim($expl[0]);
$titlenum++;
$arr['content' . $contentnum] = trim($expl[1]);
$contentnum++;
}
else{
$arr['content' . $contentnum] = trim($expl[0]);
$contentnum++;
}
}
return $arr;
}
$content = 'some content
<h2>title 1</h2>
more content
<h2>title 2</h2>
rest of the content';
$splitted = splitTitlesAndContent('<h2>','</h2>',$content);
print_r($splitted);
?>
您可以在此处试用:http://sandbox.onlinephpfunctions.com/code/e80b68d919c0292e7b52d2069128e21ba1614f4c