正则表达式的基本概念

作者:秋水 来源:蓝色理想 时间:2007-10-17 21:07:00 

经常看到说正则的文章,但说的只是方法,却很少有说以下几个基本概念:
1.贪婪:+,*,?,{m,n}等默认是贪婪匹配,即尽可能多匹配,也叫最大匹配
如果后面加上?,就转化为非贪婪匹配,需要高版本支持
2.获取:默认用(x|y)是获取匹配,很多时候只是测试,不一定要求得到所匹配的数据,
尤其在嵌套匹配或大数据中就要用非获取匹配(?:x|y),这样提高了效率,优化了程序。
3.消耗:默认是消耗匹配,一般在预查中是非消耗匹配。
举个例子,2003-2-8要变为2003-02-08
如果用/-(\d)-/第二次匹配将从8开始,从而只替换第一个2,错误
如果用/-(\d)(?=-)/则第二次匹配从第二个-开始,即不消耗字符-
4.预查:js中分为正向预查和负向预查
如上面的(?=pattern)是正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。
还有(?!pattern)是负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。
负向预查有时会用在对[^]的扩充,[^]只是一些字符,而?!可以使整个字符串。
5.回调:一般用在替换上,即根据不用的匹配内容返回不用的替换值,从而简化了程序,需要高版本支持
6.引用:\num 对所获取的第num个匹配的引用。
例如,'(.)\1\1' 匹配AAA型。'(.)(.)\2\1' 匹配ABBA型。
当然还有很多,这些都只是基本的但需要....
遇到正则问题,一般可用以下两种方法解决:
1.分类,即根据所有的可能列出各种情况,如2003以内的数
0            0
1-999         [1-9]\d{0,2}
1000-1999        1\d{3}
2000-2003        200[0-3]
所以最后的匹配就是 (0|[1-9]\d{0,2}|1\d{3}|200[0-3])
2.分组,即将整句分为不同的最小单元,如'、%、_成双出现
能成组的,即允许存在的,有
''
%% 如果是大于2的偶数个可细分为多个更小的2字符单元
__
[^'%_] 非以上字符
所以最后的匹配就是 ^(''|%%|__|[^'%_])*$

标签:正则,正则表达式,概念
0
投稿

猜你喜欢

  • 给网站界面预留退路

    2009-03-25 20:32:00
  • Google的用户体验设计原则

    2009-01-12 18:31:00
  • 多种还原.bak数据库文件方式

    2008-02-25 13:51:00
  • ASP+XML制作菜单管理

    2008-05-19 12:38:00
  • 为导入文件加上时间戳标记的两种方法

    2009-01-07 14:14:00
  • Server_Name与Http_Host的区别

    2008-06-19 13:39:00
  • 界面设计10条可用性方面的启发

    2010-04-06 17:22:00
  • SQL Server中多行多列连接成为单行单列

    2008-12-09 14:39:00
  • 关于《回访确认》的几个问题

    2009-08-24 12:43:00
  • 讲解SQL Server2005数据项的分拆与合并

    2009-01-04 14:40:00
  • 选择一个优秀正文字体的15个技巧

    2008-03-20 13:36:00
  • 初学者必读:提高SQL执行效率的几点建议

    2009-05-07 13:52:00
  • 网页效果图设计之色彩索引

    2008-03-23 13:53:00
  • Oracle建立二进制文件索引的方法

    2010-07-18 13:29:00
  • FrontPage XP设计制作网页小技巧八则

    2008-06-04 12:43:00
  • 客户体验

    2008-12-11 13:58:00
  • MySQL配置文件my.cnf中文版

    2011-09-30 11:06:15
  • web脚本程序攻击的防范

    2007-10-18 13:29:00
  • 怎样正确的解决 MySQL 中文模糊检索问题

    2008-12-19 17:26:00
  • asp如何做一个树状展开视图来显示自己的记录结构?

    2010-07-12 18:56:00
  • asp之家 网络编程 m.aspxhome.com