正则表达式的最短与最长匹配
来源:互联网 发布:js读取html代码 编辑:程序博客网 时间:2024/05/16 12:00
贪婪与懒惰
当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。考虑这个表达式:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:
a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。
为什么第一个匹配是aab(第一到第三个字符)而不是ab(第二到第三个字符)?简单地说,因为正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:最先开始的匹配拥有最高的优先权——The match that begins earliest wins。
实例:在一段SQL里面,替换掉全部的时间(如:'18-JUL-14 10.32.23.000000 AM')为to_date('20150202','yyyymmdd'),就可以在任何一款支持正则表达式的文本编辑器里面实现,如notepad++。表达式为:
(\ '\d{2}(-JUL).+?AM') ,以下是解释:
\ ' 以‘开始
\d{2} 两位数字
(-JUL) 包含-JUL
.+ 任意字符任意多个
? 第一次匹配到AM'
AM' 以AM'结尾
insert into mstb_delivery_charge (ID, DISTRICT_ENAME, DISTRICT_CNAME, SUB_DISTRICT_ENAME, SUB_DISTRICT_CNAME, DIS_CODE, DIS_MINDP, DIS_CHARGE, REGION_CODE, CREATED_TIMESTAMP, MODIFIED_TIMESTAMP, POST_CODE, EXPRESS_VENDOR, POST_TIMEAREA_RANGE, DIS_SEQUENCE)values (POS5G_RW.MSSQ_DELIVERY_CHARGE_ID.NEXTVAL, 'Xin Bei', '新北市', 'Ying Ge', '鶯歌區', '0', 2000.00, 150.00, '130', '18-JUL-14 10.32.23.000000 AM', '18-JUL-14 10.32.23.000000 AM', '239', '', 'All', 30239);insert into mstb_delivery_charge (ID, DISTRICT_ENAME, DISTRICT_CNAME, SUB_DISTRICT_ENAME, SUB_DISTRICT_CNAME, DIS_CODE, DIS_MINDP, DIS_CHARGE, REGION_CODE, CREATED_TIMESTAMP, MODIFIED_TIMESTAMP, POST_CODE, EXPRESS_VENDOR, POST_TIMEAREA_RANGE, DIS_SEQUENCE)values (POS5G_RW.MSSQ_DELIVERY_CHARGE_ID.NEXTVAL, 'Xin Bei', '新北市', 'San Chong', '三重區', '0', 2000.00, 150.00, '130', '18-JUL-14 10.32.23.000000 AM', '18-JUL-14 10.32.23.000000 AM', '241', '', 'All', 30241);
0 0
- 正则表达式的最短与最长匹配
- 正则表达式的最短匹配
- javascript正则表达式之最长匹配(贪婪匹配)和最短匹配(懒惰匹配)
- 正则表达式最短匹配
- 正则表达式最短匹配
- Python 正则最长最短匹配
- 正则表达式之最短匹配
- 正则表达式实例总结-------最短匹配
- 正则表达式之最短匹配
- 正则表达式之最短匹配
- java正则表达式---最短匹配
- 正则表达式之最短匹配
- 正则表达式之最短匹配
- 在php中用正则表达式实现最短匹配
- 正则表达最短匹配
- java正则最短匹配
- 最常用的正则表达式匹配实例
- 正则 re.search 最短匹配
- CSS书写规范、顺序
- Android开发习惯
- 简单的福彩双色球生成器
- java 对象序列化
- Maven创建web项目
- 正则表达式的最短与最长匹配
- 使用 CXF 做 webservice 简单例子
- POJ 1948 Triangular Pastures(二维背包)
- MFC RADIO button 使用
- Leetcode OJ Remove Duplicates from Sorted Array
- Eclipse快捷键(常用)
- 编码
- 设置对话框响应键盘的按键
- Enterprise app deployment doesn't install on iOS 8.1.3