Есть ли способ, используя Regex или другие функции PHP, извлечь весь html-текст в массив PHP?
Например, у меня есть эта часть кода:
Пример 1:
<div class="user" ><?= $username ?></div>
<table>
<tr>
<td>Cell 1</td>
<td>Cell 2</td>
</tr>
</table>
<span>Lorem ipsum <b>dolor</b> sit amet</span>
Lorem ipsum dolor sit amet <a href="www.example.com">Lorem</a>
Dolor site amet at date <?php echo date('Y-m-d'); ?> example
И мне нужно каким-то образом вставить его в форму, которая выведет массив следующим образом:
Array(
[0] => "Cell 1"
[1] => "Cell 2"
[2] => "Lorem ipsum <b>dolor</b> sit amet"
[3] => "Lorem ipsum dolor sit amet "
[4] => "Lorem"
[5] => "Dolor site amet at date "
[6] => " example"
)
Но делайте исключения для тегов оформления текста, таких как <u> <b> <i>
.
Я попытался использовать strip_tags
с указанными исключениями, но он несовместим и часто возвращает только первую строку, игнорирующую остальные.
ОБНОВИТЬ
Это регулярное выражение (?<=>)\s*(?=<)|(?<=>)\n*([^<]+)
- это то, о чем я просил, есть только несколько случаев, которые он допускает побег.
Когда он находит теги script
он возвращает waht между ними:
<script type="text/javascript">
tipoProd = 'Squares';
</script>
Возвращает:
tipoProd = 'Squares';
И когда он найдет строку ниже:
<div class="content section" style="padding: 40px 0px; display: <?= $dev?'none':'block'?>; text-align:center" id="selectOptions">
Retunrs все после тега закрытия PHP:
; text-align:center" id="selectOptions">
Как добавить это в регулярное выражение?
(?<=>)\s*(?=<)|(?<=>)\n*([^<]+)
Попробуйте this.Grab матч или capture.See демо.
https://regex101.com/r/qB0jV1/6
$re = ""(?<=>)\\s*(?=<)|(?<=>)\\n*([^<]+)"i";
$str = "<div class=\"user\" ><?= \$username ?></div>\n<table>\n <tr>\n <td>Cell 1</td>\n <td>Cell 2</td>\n </tr>\n</table>\n<span>Lorem ipsum <b>dolor</b> sit amet</span>\nLorem ipsum dolor sit amet <a href=\"www.example.com\">Lorem</a>\nDolor site amet at date <?php echo date('Y-m-d'); ?> example";
preg_match_all($re, $str, $matches);
DomDocument
илиSimple PHP DOM Parser
.DomDocument
, а может быть,DomXPath
, это путь.