我正在尝试拆分以下文字:
<word>test</word><word>test2</word>
等通过以下注册例:
preg_split(":</?word>:is", $html);
我得到了结果:test
和test2
作为结果,但我需要的是重新培训<word>
和</word>
标签,而不仅仅是测试和test2,我得到了另外4个带有匹配标签的元素。
如何做到这一点?
答案 0 :(得分:2)
首先:使用解析器修改XML(SimpleXML
DOM
之类的内容可能适合你,具体取决于接下来采取的措施。
然而,为了争论:
preg_split(":(</?word>):",
"<word>test</word><word>test2</word>",
0,
PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
答案 1 :(得分:0)
首先,NEVER USE REGEX TO PARSE HTML ..
但要解决您的问题,请查看preg_split()
preg_split(
":(</?word>):is",
$html,
-1,
PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY
);
现在,它会将它们拆分并给你:
array(7) {
[0]=>
string(6) "<word>"
[1]=>
string(4) "test"
[2]=>
string(7) "</word>"
[3]=>
string(2) ", "
[4]=>
string(6) "<word>"
[5]=>
string(5) "test2"
[6]=>
string(7) "</word>"
}
仍然没有好处。但是,我们可以做的是循环数组,并将<word>
移动到下一个缓冲区,并</word>
移动到前一个...
$buffer = '';
$newWords = array();
foreach ($words as $word) {
if (strcasecmp($word, '<word>') === 0) {
$buffer .= $word;
} elseif (strcasecmp($word, '</word>') === 0) {
// Find the last buffer
$last = end($newWords);
$newWords[key($newWords)] = $last . $buffer . $word;
$buffer = '';
} else {
$newWords[] = $buffer . $word;
$buffer = '';
}
}
if (!empty($buffer)) {
$newWords[] = $buffer;
}
哪会给你:
array(3) {
[0]=>
string(17) "<word>test</word>"
[1]=>
string(2) ", "
[2]=>
string(18) "<word>test2</word>"
}