有没有办法使用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">
如何将其添加到正则表达式?
答案 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);