Извлечь текстовое содержимое HTML в массив PHP [duplicate]

0

Есть ли способ, используя 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">

Как добавить это в регулярное выражение?

  • 1
    Используйте DomDocument или Simple PHP DOM Parser .
  • 0
    @Barmar: Бармар: Вы имеете в виду Simple HTML DOM? Я не рекомендовал бы это, если у вас нет расширения DOM по какой-то причудливой причине. DomDocument , а может быть, DomXPath , это путь.
Теги:
arrays

1 ответ

1
Лучший ответ
(?<=>)\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);
  • 0
    спасибо @vks, это почти все, но есть несколько случаев, которые позволяют сбежать. Я обновил вопрос
  • 0
    @CIRCLE regex101.com/r/qB0jV1/7 ????????

Ещё вопросы

Сообщество Overcoder
Наверх
Меню