现在的位置: 首页 > 网站运营推广 > 正文

正则表达式思维教程【笨鸟笔记③】

2013年05月31日 网站运营推广 ⁄ 共 1314字 评论数 1 ⁄ 阅读 4,878 次

正则表达式入门1、正则表达式的匹配过程

正则匹配是按照从表达式最左端第一个字符开始,从左到右依次一个一个字符进行匹配。当字符串中有字符成功匹配到正则表达式中字符,则从这个位置开始尝试正则表达式中的下一个字符进行匹配,如果匹配成功则继续从这个位置开始匹配正则表达式中下一个字符;如果匹配不成功,则“回溯”到第一次匹配的字符处重新从正则表达式中第一个字符开始匹配。当存在子表达式,即存在多选分支时,会依然将表达式中所有子表达式进行匹配,最后选择最左端的匹配结果。

2、正则表达式匹配原则

1)  优先选择最左端(最靠开头)的匹配结果;

2)  标准的匹配量词* + ?和{m,n}是匹配优先的;

3)  第一次匹配正则表达式都要进行到底;

4)  正则表达式是按一个字符一个字符进行匹配的。

用(fat|cat|belly|your)来匹配字符串“The dragging belly indicates that your cat is too fat.”结果不是fat,而是belly,因为正则表达式的每一次尝试都要进行到底,其他词虽然在正则中优先出现,但它们都不是最先出现的匹配结果,所以不会被选择。在进行下一轮尝试之前,正则表达式的所有可能都会尝试,也就是说,在移动之前,fat、cat、belly、your都必须尝试。

5)量词过度匹配的释放,^.*([0-9][0-9]),其中^.*首先匹配整行,而[0-9]是必须匹配的,这样会强迫.*释放一些字符用以匹配。如about 24 characters long,在匹配时.*会先将整行匹配,再一个一个字符进行释放,如此循环15次则释放到4,再进行释放为24,才能完成匹配。

6)先来先服务原则,匹配优先的结构只会在被迫的情况下才会交还字符,否则以先前为主。如用^.*([0-9])来匹配copy right 2003,括号捕获的结果将是3,因为.*只会被迫交出一个字符。

3、元字符在字符类内外的不同含义

像连字符(-)和脱字符(^),它们在字符类的内部有特殊含义。^是左括号后第一个字符时,表示括号内字符集不被匹配,在括号外即表示其直接量本身,即匹配^本身。-在括号内置于两个字符中间时表范围,在第一个位置则表示直接量本身。

4、关于空格的匹配

在不经特殊设置下,空格在正则表达式中是存在意义的,且可以匹配文本中空格字符。如“空格+限定符”的格式, ?表示空格出现或不出现, *表示出现0或多次空格。

5、常见正则表达式

匹配一个双引号内的字符串,”[^”]*”

IP地址数字的匹配

([0~9]|[1~9][0~9]|1[0~9][0~9]|2[0~4][0~9]|25[0~5])匹配小于等于255的数字

1、这种依然会匹配如256,其顺序为先匹配2而后是5再是6;

2、反序正则(25[0~5]|2[0~4][0~9]|1[0~9][0~9]|[0~9]),依然会匹配256,其顺序为先匹配25,再匹配6;

日期匹配,日期中使用的连字符如-/.则[.-/]匹配是错误的,因为-为被正则解释为范围符,正确写法应为[-/.]

 

【正则表达式系列导航】

1、正则表达式入门基础教程【笨鸟笔记①】

2、正则表达式语法进阶教程【笨鸟笔记②】

3、正则表达式思维教程【笨鸟笔记③】

» 声明:本站文章源于个人经验总结或书籍、互联网转载,内容仅用于个人学习,请勿转载,否则后果自负!

目前有 1 条留言 其中:访客:0 条, 博主:0 条 引用: 1

    给我留言

    留言无头像?