为什么叫再谈呢?因为以前瞎写了一篇关于正则表达式匹配单引号、双引号的文章,其实这个问题好像在网上问的很普遍,可能很多用正则表达式都用来匹配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 标签。还有点小问题,比如 ;等等符号的截取也存在”中途截取“ 的可能,不过无大雅,如果用pre标签,这个也很容易解决掉。
哎,还有一些东东,不想打字了…累~~~~~
(别字难免,天生就会打,没法)
绑定部分内容、替换HTML、正则表达式、HTML标签……太多太多了