Preg_split, как сохранить разделитель?
Я пытаюсь сохранить разделитель preg_split (
Я пытаюсь взять каждую строку из следующего HTML-кода и поместить его в другую позицию массива:
<tr><td> one column </td><td>second column</td></tr><tr><td> one column </td><td>second column</td></tr>
Вот что у меня есть:
array_unique(preg_split('[<tr[^>]*>(.*?)</tr>]',$table,NULL,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY));
Если я делаю var_dump моего массива, этот код показывает:
array(2) {
[0]=>
string(43) "<td> one column </td><td>second column</td>"
[1]=>
string(43) "<td> one column </td><td>second column</td>"
}
И что я хочу это:
array(2) {
[0]=>
string(52) "<tr><td> one column </td><td>second column</td></tr>"
[1]=>
string(52) "<tr><td> one column </td><td>second column</td></tr>"
}
Заранее большое спасибо за помощь и время.
2015-03-02 09:112 ответа
Решение
Просто захватите также <tr>
тег. Так как вы используете PREG_SPLIT_DELIM_CAPTURE
параметр, он также будет возвращать символы, которые были захвачены.
array_unique(preg_split('[(<tr[^>]*>.*?</tr>)]',$table,NULL,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY));
Пример 1:
$st = '<tr><td> one column </td><td>second column</td></tr><tr><td> one column </td><td>second column</td></tr>';
$match = preg_split('[(<tr[^>]*>.*?</tr>)]',$st,NULL,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
print_r($match);
Выход:
Array
(
[0] => <tr><td> one column </td><td>second column</td></tr>
[1] => <tr><td> one column </td><td>second column</td></tr>
)
Пример 2:
$st = '<tr><td> one column </td><td>second column</td></tr><tr><td> one column </td><td>second column</td></tr>';
$match = array_unique(preg_split('[(<tr[^>]*>.*?</tr>)]',$st,NULL,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY));
print_r($match);
Выход:
Array
(
[0] => <tr><td> one column </td><td>second column</td></tr>
)
Не используйте preg_split для этого. Вы хотите использовать preg_match_all:
preg_match_all('[<tr[^>]*>.*?</tr>]', $table, $matches, PREG_PATTERN_ORDER);
$rows = $matches[0];
Несколько вопросов: зачем использовать array_unique? И почему вы хотите анализировать HTML с помощью регулярных выражений? Вместо этого используйте что-то вроде xpath.