正则入门1

来源:互联网 发布:西南财大网络教育 编辑:程序博客网 时间:2024/06/06 18:35

一、入门:正则字符

关于正则字符,很多文章都会讲到,足足有一篇文章才能描述清楚,我这里就不多说,对于我,平时,常用的有:

1. . 匹配不包括换行的任意字符

在php的s修饰符下面可以匹配换行,如$pattern='#<div>(.*?)</div>#s';就可以匹配div内容有换行的数据。

2. \s 空格、tab、换行

[\s\S]表示匹配任意字符,\S是\s的反义。注意区分[\s\S]与.的区别。

3. * 匹配零个或更多个,即0~n

4. + 匹配一个或更多个,即至少一个,1~n

5. \ 转义

一个特殊字符前加\就表示转义,说明把它当普通字符用

6. [] 单字符取一个,比如[abc]会匹配a或b或c

但是,如果[]里面加上^则会变成排除这个字符,如[^abc]就表示不是a、不是b、也不是c 
另外,在[]里面可以使用-表示一个范围,如[0-9]表示从0到9,类似的还有[a-zA-Z],如果要包含-字符,可以给它加上转义[\-]。 
关于[]常见的错误用法是:[ab|bc]用来表示abbc,实际上,它得到的结果是[abc|],即a或b或c或|这4个字符(单字符)的任意一个。这里可以改成(ab|bc)。 
总结:[]里面的特殊符有五个:[]-\^,其他字符都是普通字符,包括*.?等。 
说明: 
^[^ 的首位时候才有特殊意义 
[0-9 -在不是首尾的时候有特殊意义 
\[ \] 因为占用[] 本身字符,所以有特殊意义 
\本身是转义符,有特殊意义

7. ^ 字符串开始

这里的^跟[]里面用的^是同一个字符,但是却不是一个意思,这里它表示整个字符串的开始,比如^www表示以www开头的字符串,注意区分,不在[]里面的是开始符,在里面的排除

8. $ 字符串结束

9. {1,3} 循环次数

[0-9]{1,3}表示在0-9的范围里面循环1个、2个或者3个,可能结果有5、20、415等。 
如果循环指定次数,如3次,则{3,3}可以简写成{3}。 
如果刚好需要匹配字符{1},则正则需要给{进行转义,得到\{1}的正则。 
如果{}中间不是数字,则{}本身不需要转义。

10. ? 有两个用法

(1) 匹配一个或零个

比如https?匹配的https(一个s)或者http(零个s)

(2)非贪婪模式

所谓非贪婪模式,就是匹配尽可能少的内容,比如,对于源字符串

  1. <div>a</div><div>b</div>

使用<div>(.*?)</div>会得到2个结果(注意:如果源字符串有换行,使用[\s\S]替换 . ):

  1. <div>a</div>

  1. <div>b</div>

因为,当遇到第一个</div>,非贪婪模式就不会再往后找了。 
而使用<div>(.*)</div>(贪婪模式)则会得到整个字符串

  1. <div>a</div><div>b</div>

,因为它会匹配所有字符直到后面再找不到</div>

更多关于?的使用,可以参考《正则表达式匹配次数》

原创粉丝点击