SASAOO

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 228|回复: 0

正则匹配html标签内容php获取div内容

[复制链接]

25

主题

31

帖子

129

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
129
发表于 2019-7-16 21:43:39 | 显示全部楼层 |阅读模式
正则匹配html标签内容很简单,关键是需要熟悉正则表达式的基础知识。搞懂正则表达式零宽断言知识,因为匹配html标签内容是需要排除掉标签本身的。如果只是匹配普通字符是不需要使用零宽断言的。

需求

  1. <div class="build_list">谢谢谢谢谢谢谢</div>
  2. ...
  3. <div class="build_list">哈哈哈哈哈</div>
  4. ...
  5. <div class="abc">嘿嘿嘿</div>
复制代码

如上一段html标签,要求匹配到div标签中的内容不包括div标签本身div的属性可变。

预备知识

正则表达式匹配基本知识,html标签语法知识。

正则表达式实现

(?<=\<div.*?\>)(.*?)(?=\<\/div\>)

语句解释:

(.*?) 使用了懒惰模式,否则会匹配过多的内容。

内容两边使用零宽断言,只匹配div标签包裹的内容。

PHP编码实现

note :php中正则表达式支持并不完整,不支持后发断言中 表达式含有量词 (先发断言支持),所以不能实现div标签属性改变时动态匹配。 具体实现如下 :

  1. preg_match_all('$(?<=\<div\sclass="build_list"\>)(.*?)(?=\<\/div\>)
  2. [p=32, 2, left][color=rgb(51, 51, 51)][size=16px]输出如下:[/size][/color][/p][code]Warning: preg_match_all(): Compilation failed: lookbehind assertion is not fixed length at offset 14 in /Users/wudanyang/self/php_study/test/test.php on line [$line_number]
  3. array(2) {
  4.   [0]=>
  5.   array(2) {
  6.     [0]=>
  7.     string(21) "谢谢谢谢谢谢谢"
  8.     [1]=>
  9.     string(15) "哈哈哈哈哈"
  10.   }
  11.   [1]=>
  12.   array(2) {
  13.     [0]=>
  14.     string(21) "谢谢谢谢谢谢谢"
  15.     [1]=>
  16.     string(15) "哈哈哈哈哈"
  17.   }
  18. }
复制代码

正则匹配html标签内容总结

实现这个功能需要对 正则表达式中的零宽断言 有一定的了解,并且能够看懂html语法。html很容易看懂,但是零宽断言就有点绕弯子。但是只要记住 带小于号 的都在要匹配的内容的 前面 ,不带小于号的在后面。这样正则表达式就容易写出来了。


,$string,$content);
preg_match_all('$(?<=\<div.*?\>)(.*?)(?=\<\/div\>)

输出如下:

  1. Warning: preg_match_all(): Compilation failed: lookbehind assertion is not fixed length at offset 14 in /Users/wudanyang/self/php_study/test/test.php on line [$line_number]
  2. array(2) {
  3.   [0]=&gt;
  4.   array(2) {
  5.     [0]=&gt;
  6.     string(21) "谢谢谢谢谢谢谢"
  7.     [1]=&gt;
  8.     string(15) "哈哈哈哈哈"
  9.   }
  10.   [1]=&gt;
  11.   array(2) {
  12.     [0]=&gt;
  13.     string(21) "谢谢谢谢谢谢谢"
  14.     [1]=&gt;
  15.     string(15) "哈哈哈哈哈"
  16.   }
  17. }
复制代码

正则匹配html标签内容总结

实现这个功能需要对 正则表达式中的零宽断言 有一定的了解,并且能够看懂html语法。html很容易看懂,但是零宽断言就有点绕弯子。但是只要记住 带小于号 的都在要匹配的内容的 前面 ,不带小于号的在后面。这样正则表达式就容易写出来了。


,$string,$errorContent);
var_dump($content);[/code]

输出如下:

[        DISCUZ_CODE_8        ]

正则匹配html标签内容总结

实现这个功能需要对 正则表达式中的零宽断言 有一定的了解,并且能够看懂html语法。html很容易看懂,但是零宽断言就有点绕弯子。但是只要记住 带小于号 的都在要匹配的内容的 前面 ,不带小于号的在后面。这样正则表达式就容易写出来了。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|SASAOO.

GMT+8, 2019-9-18 09:08 , Processed in 0.093750 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表