Во-первых, НИКОГДА НЕ ИСПОЛЬЗУЙТЕ РЕГЕКС ДЛЯ РАЗДЕЛЕНИЯ 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>"
}