正则匹配网页中 div 框架的问题

Vim、Emacs配置和使用
回复
头像
liumailong
帖子: 244
注册时间: 2008-02-12 6:41

正则匹配网页中 div 框架的问题

#1

帖子 liumailong » 2011-06-23 16:51

div 框架是网页中常见的元素,由“<div”开头 “</div>”结尾后很有规律性。
但用正则匹配特定的 div 框架,却不容易。
关键在于框架套嵌的问题,即 div 框架中还有其它的 div 框架。
如果还不知道其它 div 框架的数量,更是难解。
再下研究了很久还是没想到解法,特来请教大家。
:em06

下面是个例子:要匹配 <div class="cont"> 框架的全部内容该如何做?(最好用单行 Perl)
注意:“... ...”表示还有其它的 div 框架省略了

代码: 全选

... ... ... ... ... ... (省略 N 个 div 框架 )
 <div class="tabs">
  <div class="cont"> 
	<div class="list1" id="zbtj_div1">
	<ul>
			 <script>
			 (function() {
			 document.write(ListOther(window.ZhongBangRecom || [], 14, 6));
			 })(); 
			 
			 </script> </ul>
	</div>
	... ... ... ... ... ... (省略 N 个 div 框架 )
	<div class="list1" id="zbtj_div2" style=" display:none">
			<div class="box2" id="divbjzp"></div>
	</div>	
	<div class="list1" id="zbtj_div3" style=" display:none;padding:0;">
	<div class="box" id="divmjzp" style="height:auto"></div>
	</div>
  </div>
 </div>
</div>
... ... ... ... ... ... (省略 N 个 div 框架 )
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 正则匹配网页中 div 框架的问题

#2

帖子 lilydjwg » 2011-06-23 20:48

LZ 发帖不看版面啊,既然你要单行 Perl,那么下面那个拿去改好了:
将所有匹配的<>替换为空字符串

代码: 全选

s/(<(?:[^<>]++|(?1))*>)//g
BTW: 你实在是应当用 HTML 解析器。
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: 正则匹配网页中 div 框架的问题

#3

帖子 fanhe » 2011-06-23 21:56

正常的正则表达式是不支持嵌套匹配的
因为有限状态自动机是有限的, 没法记住不定数量的嵌套的

用脚本语言的解析器不是挺好啊
头像
liumailong
帖子: 244
注册时间: 2008-02-12 6:41

Re: 正则匹配网页中 div 框架的问题

#4

帖子 liumailong » 2011-06-25 18:42

fanhe 写了:正常的正则表达式是不支持嵌套匹配的
因为有限状态自动机是有限的, 没法记住不定数量的嵌套的

用脚本语言的解析器不是挺好啊
Perl 可以,但要先声明变量,不知道单行怎么写....
:em06
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: 正则匹配网页中 div 框架的问题

#5

帖子 fanhe » 2011-06-25 19:55

liumailong 写了:
fanhe 写了:正常的正则表达式是不支持嵌套匹配的
因为有限状态自动机是有限的, 没法记住不定数量的嵌套的

用脚本语言的解析器不是挺好啊
Perl 可以,但要先声明变量,不知道单行怎么写....
:em06
这不是正常的(编译原理中的)正则表达式
它自己扩展过的
头像
liumailong
帖子: 244
注册时间: 2008-02-12 6:41

Re: 正则匹配网页中 div 框架的问题

#6

帖子 liumailong » 2011-06-25 20:00

fanhe 写了:
liumailong 写了:
fanhe 写了:正常的正则表达式是不支持嵌套匹配的
因为有限状态自动机是有限的, 没法记住不定数量的嵌套的

用脚本语言的解析器不是挺好啊
Perl 可以,但要先声明变量,不知道单行怎么写....
:em06
这不是正常的(编译原理中的)正则表达式
它自己扩展过的
有办法单行吗?
:em06
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: 正则匹配网页中 div 框架的问题

#7

帖子 fanhe » 2011-06-25 23:12

liumailong 写了:
fanhe 写了:
liumailong 写了:
fanhe 写了:正常的正则表达式是不支持嵌套匹配的
因为有限状态自动机是有限的, 没法记住不定数量的嵌套的

用脚本语言的解析器不是挺好啊
Perl 可以,但要先声明变量,不知道单行怎么写....
:em06
这不是正常的(编译原理中的)正则表达式
它自己扩展过的
有办法单行吗?
:em06
我完全不懂 perl 的
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

Re: 正则匹配网页中 div 框架的问题

#8

帖子 yjcong » 2011-06-25 23:24

排队等神谕
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
头像
liumailong
帖子: 244
注册时间: 2008-02-12 6:41

Re: 正则匹配网页中 div 框架的问题

#9

帖子 liumailong » 2011-06-27 16:30

lilydjwg 写了:LZ 发帖不看版面啊,既然你要单行 Perl,那么下面那个拿去改好了:
将所有匹配的<>替换为空字符串

代码: 全选

s/(<(?:[^<>]++|(?1))*>)//g
BTW: 你实在是应当用 HTML 解析器。

研究几天了,想不出来
能直接给答案吗?
:em06
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 正则匹配网页中 div 框架的问题

#10

帖子 eexpress » 2011-06-27 16:31

perl -e 'xxxxxxxxxxxxxxxxx;'

想咋写,就咋写。
● 鸣学
头像
liumailong
帖子: 244
注册时间: 2008-02-12 6:41

Re: 正则匹配网页中 div 框架的问题

#11

帖子 liumailong » 2011-06-27 16:52

eexpress 写了:perl -e 'xxxxxxxxxxxxxxxxx;'

想咋写,就咋写。
没看见8 楼说的吗?
你就给个神谕吧!
:em04
回复