[转]使用正则表达式优化网页代码

转载 2007年09月17日 11:20:00
使用正则表达式优化网页代码
 
       正则表达式最早在perl语言中出现,在此之前为了测试字符串中是否存在某个字符,不得不使用如ChatAt()、indexOf()等函数对字符串循环校验。一旦验证的条件复杂起来(比如身份证校验)实现就变得相当繁杂和艰巨。为此人们就发明了正则语法,使用一个特殊的字符串作为模板,对输入的字符流进行匹配,这跟电子厂的PCB板检测原理很相似。正则表达式在不同工具中实现方式虽然有点不同,但表达语法相同,一般都遵循了ECMPScript 的RegExp类语法标准,具体可以查看,《ECMAScript Language Specification》中有关RegExp的描述,如果想深入了解正则表达式,http://www.regular-expressions.info/是个不错的网站。
       网页代码优化的最主要工作的就是对页面源代码的简化。对于用网页工具或其他转换工具(比如Word—>Html)制作的网页,简化与未简化的网页大小相差往往在一倍以上。别小看简化的作用,对于目前的互联网带宽来说,将50kb的页面缩小成20kb可能感觉不到浏览速度的提升,但对小型手持设备如手机、PDA来说,这是非常致命的,不仅是带宽的问题,页面代码越多,浏览器解析与导航(定位)的速度就越慢,消耗的内存也越厉害。网页代码的精简程度是衡量网页设计人员水平高低的一个重要标准。
闲话说了这么多,现在进入正题。代码简化工作是通过对文本进行“查找替换”实现的。普通的全字符串匹配的查找替换可以帮我们完成大部分的代码简化功能,对于有条件的简化,必须使用正则表达式进行处理。基本上带有文本编辑功能的编辑器(比windows写字板高级点的)都带有支持正则表达式的“查找替换”功能。由于是对网页代码进行优化,因此我们还是使用专门的DreamWeaver或FrontPage进行操作。这两个工具都带有html代码优化功能,但基本上都不能满足我们的要求。而且优化的功能都可以通过使用正则表达式进行实现。FrontPage正则表达式的很多标记跟标准的不同(真不明白ms为什么老是要自己搞另外一套-_-!!),这里我只介绍适合DreamWeaver的方法。
应用一:删除空白标签
像<span></span>、<b></b>这类页面编辑后遗留的空白标签是可以清理的,但要注意的是,在一些应用中(如ajax的回显)可能会用到一些有id属性的空白标签。
查找
替换
<(.*)/b.*?>/s*<//1>
 
 
用这个也可以删除一些不必要的标签,只要/s*替换成捕获组:
查找
替换
<(.*)/b.*?>((?:[^<//1]|/s)*)<//1>
$2
记得把.*换成你要替换的标签,另外它无法处理嵌套的标签。但变更一下,可以处理嵌套带不同属性的相同标签。
 
应用二:删除文本中的html标签
查找
替换
<(?:.|/s)*?>
 
 
应用三:删除多余的空白
比如把<div id=””   >替换为<div id=””>
查找
替换
/s{2,}
(一个空格)
/s{1,}(.|/)>
$1>
 
应用四:标签合并
比如把<b><b>abc</b>defedd</b>替换成<b>abcdefedd</b>
对多层嵌套的结构必须一步步“脱壳”:
 
查找
替换
(<(.*)/b.*?>)((?:[^</2]|/s)*?)/1((?:.|/s)*?)<//2>((?:.|/s)*?)<//2>
<$2>$3$4$5</$2>
这个方法一次只能合并一个内嵌标签,要多替换几次。
最好指定(.*)中.*代表的具体标签,避免合并了不该合并的标签。比如b或font,如果要合并带属性的标签,只需要把<(.*)/b.*?>改成<(.|/s)*?>就可以了。
 
应用五:将具有特定属性的标签用css引用简化
假设要把
<td bgcolor=”#FFFFFF” width=”20px”>换成
<td bgcolor=”#FFFFFF” class=”style1”>
查找
替换
<(.*)/b(.*)width="20px"((.|s)*)>
<$1 $2 class=”style1” $3>
 
你需要将.*换成要处理的标签。
举一反三,我们可以把width=”20px”的td加宽2倍
查找
替换
<(.*)/b(.*)width="20px"((.|s)*)>
<$1 $2 width="40px"$3>
 
应用六:删除html注释
查找
替换
<!(.|/s)*?>
 
<!--(.|/s)*?-->
 
 
以上是几个正则表达式在简化代码方面的简单例子,这里虽然只讲如何进行网页代码的优化,但实际上正则表达式的作用远不只如此,只要发挥我们的想象力,正则表达式在文本编辑领域必大有所为。
值得一提的是,在FrontPage的“查找替换”功能中,有个“HTML规则”和“HTML标记”的功能,方便了我们对html代码进行编辑,适合对正则表达式不熟悉的人使用。
 

 

【python学习笔记】用正则表达式从含中文的网页中提取数据(含编码转换)

目标:用正则表达式从含中文的网页中提取数据 1、获得网页全部数据 1.1思考过程 确定我们要操作的网页:url = 'http://q.stock.sohu.com/cn/603077/cwzb.sh...
  • pzxzhy
  • pzxzhy
  • 2015年12月27日 17:05
  • 2446

正则表达式入门知识+用它实现在一个网页中获取所有的链接地址

概念:正则表达式是一种计算机科学的概念、它通常用来检索和替换那些符合规则的文本或者字符串。现在很多的程序设计语言计都支持利用正则表达式来进行字符串的操作,有java、c++、python、javasc...
  • lu93it
  • lu93it
  • 2016年09月14日 08:55
  • 2242

[Python]爬虫,正则表达式解析网页及Json序列化

无意间发现一个有免费VPS的网站,但是密码时常更新,需要经常访问这个网站去获取最新的密码。作为一个喜欢偷懒的程序猿,怎么能容忍不断做这种有规律重复的事情呢?妥妥的可以交给程序去做嘛~所以突击学习了以下...
  • u012741077
  • u012741077
  • 2016年05月30日 23:17
  • 3868

使用正则表达式优化网页代码

  正则表达式最早在perl语言中出现,在此之前为了测试字符串中是否存在某个字符,不得不使用如ChatAt()、indexOf()等函数对字符串循环校验。一旦验证的条件复杂起来(比如身份证校验)实现就...
  • viproc
  • viproc
  • 2011年06月29日 12:21
  • 263

正则表达式爬取网页内容的简单使用

对于网页的html标签要善于发现标签的一些特定写法有助于爬取正则表达式的书写,尤其一些独有的标签 列入  class、id、src等 # coding: utf-8 import re str...
  • sxc1414749109
  • sxc1414749109
  • 2018年01月10日 14:42
  • 32

java 使用正则表达式从网页上提取网站标题

     如何从网页上抓取有价值的东西?看懂了下面的程序(非常简单),想从网页上抓取什么信息(标题、内容、Email、价格等)就能抓取什么信息。package catchhtml;import jav...
  • yuyuyuyuy
  • yuyuyuyuy
  • 2011年06月16日 00:00
  • 8346

python使用正则表达式编写网页小爬虫

""" 文本处理是当下计算机处理的主要任务,从文本中找到某些有用的信息, 挖掘出某些信息是现在计算机程序大部分所做的工作。而python这中轻量型、小巧的语言包含了很多处理的函数库, 这些库的跨...
  • liuguiyangnwpu
  • liuguiyangnwpu
  • 2015年04月09日 22:13
  • 9427

java爬取网页内容 简单例子(1)——使用正则表达式

【本文介绍】   爬取别人网页上的内容,听上似乎很有趣的样子,只要几步,就可以获取到力所不能及的东西,例如呢?例如天气预报,总不能自己拿着仪器去测吧!当然,要获取天气预报还是用webServic...
  • joeyon
  • joeyon
  • 2015年02月05日 12:35
  • 726

C#使用正则表达式提取网页中的信息数据

大家好,今天来分享一下在ASP.NET中如何通过正则表达式的使用来获取HTML的信息。 如我们所知,网页中经常会包含一些非常有用的信息,比如网页标题(title),文本(text),图片(image)...
  • aa466564931
  • aa466564931
  • 2011年06月29日 18:49
  • 8840

正则表达式练习: android 歌词解析lrc 转 txt 代码

//主要用到了java io 的基本知识 和 正则表达式package com.su; import java.io.BufferedReader; import java.io.File; imp...
  • sfshine
  • sfshine
  • 2012年04月08日 15:23
  • 991
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[转]使用正则表达式优化网页代码
举报原因:
原因补充:

(最多只允许输入30个字)