Login Gblog  
简单点~~~
 
文章全文
Goberl 发表于 2008-8-5 5:17:45

       为什么叫再谈呢?因为以前瞎写了一篇关于正则表达式匹配单引号、双引号的文章,其实这个问题好像在网上问的很普遍,可能很多用正则表达式都用来匹配HTML标签了,从CNZZ的统计里面也看出了,很多人都是搜索此关键词到访了。

        今天,仅想谈谈平时用正则表达式时最常用到的一些问题,最多可能算一点得意的经验(在初学者眼里)。同时,今天的正则表达式主要用于.NET,其他语言稍有些不同。

      1. 匹配右侧满足某条件的——正声明,(?=)
         例如,有N多字符,需要匹配如下条件的字符串,C#.NET,VB.NET,JScript.NET。则:\s+(?=\.NET)
      2. 匹配右侧不满足某条件的——负声明, (?!)
         例如,有123A 456 789 121C,需要匹配 456 789,即右侧不是字母的字符。 则:\d{3}(?![^\d])
      3. 匹配左侧满足某条件的——反正声明, (?<=)
         例如,有 New Mexico West Virginia Washington New Engliand,需要匹配 Mexico England。  则:(?<=New)空格([a-zA-Z]+)
      4. 匹配左侧不满足某条件的——反向负声明, (?< !)
         例如,有123A 456F 789C 121A,需要匹配56F 89C,即最左侧不是1的字符串. 。则:(?< !1)\d{2}[A-Z]
       以上4点虽然看似简单,却能从里面变化出很多样式出来,平时用的最多的也就这几个主要的高级组。

        来点实用的综合性例子。平 时绑定文章数据时,在文章列表处通常不会显示文章的所有数据,以减少网页下载时间。我们想在绑定之前对数据库中存储的HTML进 行截取,比如截取前400个字符(包括HTML标记在内),但我们用 Left、或者SubString函数直接截取绑定时,会发现一个致命错误。

      比如第38*(380几个字符)到第41*(410几个字符)的字符是这样的:
        <span style='”color:red ;“>www.Goberl.com</span >
       当我们直接用函数截取,刚好取到com就结束了,即com左侧的小数点是第400个字符,这时候绑定到页面中,你会发现,你的页面在该标记处以下都是红颜 色了。Shit,有人告诉你或者我先把绑定内容的HTML标签替换了,再截取绑定,How to do this?

       正则表达式替换HTML标签以绑定数据:\<\/?[^\u002F]*\/? \>,里面的\u002F是反斜杠"/",也可以写作\<\/?[^\/]*\/?\>,解释解释:

        1.\<     以括弧开始
        2./?     如果是闭标签 则存在反斜杠。?问号表示存在1或者0
        3.[^\/]* 存在任意个非反斜杠的字符
        4.\/?    可能存在一个反斜杠,如 <br />、<hr />与其他标签的不同处
        5.\>     以括弧结束

       OK,就这十几个字符再加上正则表达式的功能就可把html标签统统Regex.Match、 Regex.Replace。现在呢,还有点不足,这下把换行等符号也给替换了,前台显示内容一大片,咋办呢?

      那就在替换之前把替换为\r或者其他符号,等用正则表达式替换HTML标签之后再替换回来(考虑考虑效率)、或者用pre 标签。还有点小问题,比如&nbsp;等等符号的截取也存在”中途截取“ 的可能,不过无大雅,如果用pre标签,这个也很容易解决掉。    

      哎,还有一些东东,不想打字了…累~~~~~(别字难免,天生就会打,没法)

      绑定部分内容替换HTML正则表达式HTML标签……太多太多了

类别:Dev      标签:正则表达式      浏览(61)
相关主题:
评论列表:
kk     发表于 2008-9-18 23:49:00
太复杂
发表评论
大名: ( *必填)
Email: (填写后,将收到Goberl对你的回复)
网址: (可选)
正文:
      记住信息?