SASAOO

?找回密码
?立即注册
搜索
热搜: 活动 交友 discuz
查看: 474|ag环亚集团: 0
打印 上一主题 下一主题

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

[复制链接]

26

主题

32

帖子

136

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
136
跳转到指定楼层
楼主
发表于 2019-7-16 21:43:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
正则匹配html标签内容很简单,关键是需要熟悉正则表达式的基础知识。搞懂正则表达式零宽断言知识,因为匹配html标签内容是需要排除掉标签本身的。如果只是匹配普通字符是不需要使用零宽断言的。

需求

  1. 谢谢谢谢谢谢谢

  2. ...
  3. 哈哈哈哈哈

  4. ...
  5. 嘿嘿嘿
复制代码

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

预备知识

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

正则表达式实现

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

语句解释:

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

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

PHP编码实现

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

  1. preg_match_all('$(?<=\)(.*?)(?=\<\/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\>)

输出如下:

  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]=>
  4. ??array(2) {
  5. ? ? [0]=>
  6. ? ? string(21) "谢谢谢谢谢谢谢"
  7. ? ? [1]=>
  8. ? ? string(15) "哈哈哈哈哈"
  9. ??}
  10. ??[1]=>
  11. ??array(2) {
  12. ? ? [0]=>
  13. ? ? string(21) "谢谢谢谢谢谢谢"
  14. ? ? [1]=>
  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-11-10 12:41 , Processed in 0.124999 second(s), 20 queries .

Powered by Discuz! X3.4

? 2001-2017 Comsenz Inc.

快速ag环亚集团 返回顶部 返回列表