将HTML文本内容提取到PHP数组

时间:2014-12-11 02:37:45

标签: php arrays regex

有没有办法使用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标签时,它会返回它们之间:

<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">

在PHP关闭标记后重新启动所有内容:

; text-align:center" id="selectOptions">

如何将其添加到正则表达式?

1 个答案:

答案 0 :(得分:1)

(?<=>)\s*(?=<)|(?<=>)\n*([^<]+)

试试这个。抓住比赛或捕捉。参见演示。

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);