Я пытался целый день реализовать это, но прогресса нет.
У меня есть эта часть кода
$LookUpData =array(
ID1 => '<div> First </div>',
ID2 => '<p>Second</p>'
);
$tagData = $LookUpData[ID1];
print_r($tagData);
Результат, который я получил в этом случае: Первый
Идеальный сценарий будет, если я получу:
0 => <div>
1 => First
2 => </div>
Я надеюсь, что вы поймете, в чем моя проблема и что мне нужно. Всякая помощь приветствуется.
Код, который решает вашу проблему
<?php
$LookUpData =array(
'ID1' => '<div> First </div>',
'ID2' => '<p>Second</p>'
);
$tagData = $LookUpData['ID1'];
preg_match('#(<.*?>)(.*)(</.*?>)#', $LookUpData['ID1'],$m);
unset($m[0]);
print_r($m);
?>
Выход из кода:
Array ( [1] => <div> [2] => First [3] => </div> )
Объяснение:
Объяснение шаблона:
##
- это символы, которые определяют начало и конец рисунка(<.*?>)
- это подшаблон, который будет искать любой символ между <>, он будет соответствовать и т.п.
(.*)
- это шаблон для любого персонажа (почти любой)(</.*?>)
- еще один подшаблон на этот раз для закрытия тега почти такой же, как первый.Демо-версия в Интернете - обратите внимание, что код немного отличается, чтобы правильно отображаться в браузере (html-теги)
$matches = array();
preg_match("/(<[^>]+>)(.*)(<\/[^>]>)/", "<div>First</div>", $matches);
var_dump($matches);
Должно быть достаточно, чтобы вы начали
[^>]
вмещающий только 1 символ, который вы должны объявить *?
или +?
к этим классам. Также .*
Является жадным, что не подходит для больших HTML-файлов.