`
viproc
  • 浏览: 46379 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

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

阅读更多

正则表达式最早在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代码进行编辑,适合对正则表达式不熟悉的人使用。

分享到:
评论

相关推荐

    正则表达式学习资料以及练习项目代码很多

    - **正则表达式性能优化**:避免过度复杂的正则表达式,合理使用非贪婪匹配,减少回溯。 - **正则表达式调试**:使用`re.DEBUG`标志编译正则表达式,查看其内部结构。 - **正则表达式在其他语言中的差异**:虽然...

    正则表达式测试工具.

    正则表达式(Regular Expression...例如,你可以使用正则表达式在网页源代码中提取特定信息,或者在日志文件中查找特定模式。通过熟练使用正则表达式测试工具,你可以更有效地编写和调试这些表达式,从而提高工作效率。

    正则表达式匹配调试工具

    综上所述,这个"正则表达式匹配调试工具"很可能是一个集成了多种功能的实用工具,能够帮助开发者高效地调试和优化他们的正则表达式,提高工作效率。通过安装并使用这些文件,用户可以体验到便捷的正则表达式调试环境...

    正则表达式(Word)

    正则表达式入门指南 正则表达式是编写处理字符串的程序或网页时经常会用到的工具,用于描述某些复杂规则的字符串。正则表达式可以精确地描述用户的需求,并且...其他知识点包括正则表达式的优化、性能优化、调试等。

    正则表达式经典实例

    - **性能优化**:例如,通过调整正则表达式的结构减少不必要的计算,提高处理速度。 #### 四、适用人群 - **软件开发人员**:无论是新手还是有经验的开发者,都能从本书中学到新知识和技巧。 - **系统管理员**:...

    objc使用正则表达式

    然后,我们将使用正则表达式处理读取到的网页内容。正则表达式是一种强大的文本匹配工具,能有效地查找、替换和提取字符串中的模式。在objc中,主要通过`NSRegularExpression`类来实现。 1. 创建正则表达式对象:...

    精通正则表达式电子书

    - **优化技巧**:提供了关于如何优化正则表达式使用的技巧,帮助节省资源。 #### 五、正则表达式的实际应用 1. **数据验证**:利用正则表达式进行表单输入的有效性验证。 2. **文本搜索**:在大型文档中查找特定...

    正则表达式从入门到精通

    深入学习正则表达式,不仅需要理解这些基本概念,还需要掌握如何在不同上下文中应用它们,包括如何处理Unicode字符、优化正则表达式性能以及在不同编程语言中使用正则表达式的差异。此外,实战练习和解决实际问题是...

    正则表达式趣味例子集合

    6. **正则表达式的性能与优化** - 长度优先原则:正则引擎通常优先尝试最短的匹配方式,可能导致回溯,影响性能。 - 避免贪婪匹配:默认情况下,量词是贪婪的,会尽可能多的匹配字符,有时应使用非贪婪版本`*?`、`...

    精通正则表达式(英文版+中文目录)

    在实践中,书中会讨论如何在各种编程语言中使用正则表达式,如JavaScript、Python、Java等,并给出具体的示例代码,帮助读者理解如何在实际开发中应用正则表达式。此外,书中还会讲解正则表达式引擎的工作原理,这...

    易语言正则表达式数据库1源码,易语言正则表达式数据库1.3版

    - **性能优化**:通过算法改进或代码优化提高正则表达式匹配速度,减少内存消耗。 - **新功能添加**:增加了新的正则表达式功能,如非贪婪匹配、环视等高级特性。 - **错误处理**:完善了错误检测和处理机制,提供更...

    PCRE 正则表达式 DLL 工程

    - 为了优化性能,可能需要对正则表达式进行预编译,并根据需求考虑使用`pcre_study()`。 7. **注意事项** - 使用DLL时需注意版本兼容性,确保应用程序和DLL使用的PCRE库版本一致。 - 考虑到线程安全,如果多线程...

    mtracer2.0正则表达式验证工具

    - **代码搜索**:在IDE中,使用正则表达式查找和替换代码片段。 综上所述,mtracer2.0正则表达式验证工具是开发和测试正则模式的有力助手,无论你是初学者还是经验丰富的开发者,都能从中受益。通过掌握正则表达式...

    正则表达式系统教程——学习正则的最简单的教程

    教程的CHM文件很可能会包含一系列章节,逐步介绍这些概念,并通过实例演示如何在实际代码中应用正则表达式。同时,你还会学到如何调试正则表达式,以及如何优化它们以提高性能。 总之,"正则表达式系统教程"是一份...

    页面静态化的正则表达式

    正则表达式可以用于从动态页面的源代码中提取特定部分,例如标题、正文或图片链接。例如,`(.*?)&lt;\/title&gt;`可以用于提取页面的标签内容。 3. **URL重写** 使用如Apache或Nginx等服务器的URL重写规则,可以将用户...

    正则表达式chm版教程

    1. **验证输入**:在表单验证中,使用正则表达式检查用户输入的格式,如邮箱、电话号码、日期等。 2. **数据提取**:从长文本或日志文件中提取特定信息,例如从网页源代码中抓取链接。 3. **搜索与替换**:在文本...

    RegexTool正则表达式测试小工具

    通过RegexTool这样的工具,开发者可以更直观地看到正则表达式的效果,从而更好地理解和优化他们的代码。 使用RegexTool进行测试和调试时,应注意以下几点: - **理解元字符**:正则表达式中的元字符如`^`、`$`、`....

    C#和JAVA正则表达式

    在编程领域,正则表达式(Regular Expression)是一种强大的文本处理工具,...在C#和Java中,我们可以通过单元测试、代码调试等方式不断试验和优化正则表达式,以便在实际项目中更加得心应手地处理各种文本处理任务。

    正则表达式调试工具主要用来网页采集的正则调试

    运行这个程序,用户可以输入待测试的正则表达式和网页源代码,直观地看到匹配的结果。这对于优化网页采集脚本或提升数据提取效率具有重要作用。 总的来说,正则表达式调试工具是IT从业者尤其是Web开发者和数据分析...

Global site tag (gtag.js) - Google Analytics