正则表达式的基本概念

作者:秋水 来源:蓝色理想 时间: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
投稿

猜你喜欢

  • Mysql巧用join优化sql的方法详解

    2024-01-16 01:19:34
  • Python实现CET查分的方法

    2023-06-13 12:05:51
  • SQL Server 2000日志转移实现高可用性

    2009-01-20 15:04:00
  • 一实用的table内容排序Javascript类库

    2008-11-02 15:03:00
  • python-docx修改已存在的Word文档的表格的字体格式方法

    2021-07-20 05:03:07
  • Python socket处理client连接过程解析

    2022-04-30 15:44:31
  • Python 爬虫爬取指定博客的所有文章

    2021-09-10 04:44:51
  • Python range与enumerate函数区别解析

    2022-03-05 21:40:20
  • Python如何转换字符串大小写

    2021-03-16 17:40:20
  • Python将字符串常量转化为变量方法总结

    2023-07-14 00:36:58
  • JavaScript转换与解析JSON方法实例详解

    2024-04-17 10:22:44
  • JavaScript循环遍历的24个方法,你都知道吗

    2024-04-17 09:41:18
  • 基于并发服务器几种实现方法(总结)

    2021-12-30 16:18:09
  • ASP分页和日期格式化为RFC822格式的办法

    2008-11-21 15:46:00
  • python实现猜数游戏(保存游戏记录)

    2022-08-31 09:39:54
  • 浅谈JavaScript函数节流

    2024-05-03 15:59:31
  • 一文带你搞懂Python中的pyc文件

    2022-01-25 20:01:03
  • 怎样安全地关闭MySQL实例

    2024-01-20 02:39:20
  • Python提取特定时间段内数据的方法实例

    2023-09-12 05:21:49
  • Go开源项目分布式唯一ID生成系统

    2024-02-14 22:08:15
  • asp之家 网络编程 m.aspxhome.com