分页: 1 / 1

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

发表于 : 2011-06-23 16:51
liumailong
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 框架 )

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

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

代码: 全选

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

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

发表于 : 2011-06-23 21:56
fanhe
正常的正则表达式是不支持嵌套匹配的
因为有限状态自动机是有限的, 没法记住不定数量的嵌套的

用脚本语言的解析器不是挺好啊

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

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

用脚本语言的解析器不是挺好啊
Perl 可以,但要先声明变量,不知道单行怎么写....
:em06

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

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

用脚本语言的解析器不是挺好啊
Perl 可以,但要先声明变量,不知道单行怎么写....
:em06
这不是正常的(编译原理中的)正则表达式
它自己扩展过的

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

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

用脚本语言的解析器不是挺好啊
Perl 可以,但要先声明变量,不知道单行怎么写....
:em06
这不是正常的(编译原理中的)正则表达式
它自己扩展过的
有办法单行吗?
:em06

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

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

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

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

发表于 : 2011-06-25 23:24
yjcong
排队等神谕

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

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

代码: 全选

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

研究几天了,想不出来
能直接给答案吗?
:em06

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

发表于 : 2011-06-27 16:31
eexpress
perl -e 'xxxxxxxxxxxxxxxxx;'

想咋写,就咋写。

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

发表于 : 2011-06-27 16:52
liumailong
eexpress 写了:perl -e 'xxxxxxxxxxxxxxxxx;'

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