您的位置:首页 > 编程语言 > PHP开发

PHP正则表达式的语法及常用正则表达式

2017-09-06 22:03 597 查看
正则表达式

又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。

看这个百科太正规了,个人理解就是在一堆字符串中筛选出符合自己定义的规则的字符串。用来验证一些有特殊规律的字符串,如身份证,电话号码等。

语法介绍:

正则表达式包括四个部分,定界符、元字符、量词、模式修正符。

1.定界符:即//; $reg = ‘//’;在定界符中编写相应的规则。

2.元字符:即筛选规则的主要部分,可以填写原字符进行筛选,如用

$reg = ‘/a/’;筛选出a。也可以用以下转义字符,来表示一定的范围。

\w 小写w表示筛选的内容就是字母、数字、下划线范围中的任意一个

\W 与小写w相反。

\d表示数字(0-9)范围中的任意一个

\D表示数字范围之外(除了数字之外的)任意一个

\s ,表示一个空格

\S,除了空格之外的任意一个字符

**\b,boundary,国界线,在正则表达式中表示单词之间的边界

\B,表示除了字符边界线之外的任意一个字符**

[]中括号,表示范围中的一个如[a-z]

. ,英文的点号,表示除了换行符(\n)之外的任意一个字符

| 表示或者

\x{4e00} - \x{9fa5}表示中文的范围ACSII码 注意需要在正则表达式之后加上/u模式符,使其转换为utf8国际编码。

3.量词

*:表示0个或多个

+:表示至少1个

?:表示0个或1个

注意

?比较特殊,如果?放在元字符后面,表示量词,也就是匹配的数量,如果?放在量词后面,也是将贪婪模式转换成懒惰模式的意思

^ $,^表示开始的位置,$表示结束的位置

4.模式修正符

书写在正则表达式的最后

即$reg = ‘//i’;

1.i –即ignore 即忽视大小写

2.U –将默认的贪婪模式转换为懒惰模式,即读取一个就停止

贪婪模式是尽可能多的读。

3.u,采用utf-8编码对字符进行转码

4.s,表示万能点模式,默认情况下,.英文点号匹配除了换行符\n之外的任意字符,采用万能点模式之后,英文点号匹配任意的字符包括\n换行

5./m,multi 多行模式(了解即可)多行模式,就是将换行的地方看做是一个新的字符串

正则表达式的一些要点:

捕获与分组通过小括号进行捕获与分组,在匹配后的数组中将分组返回,下标为0的返回原匹配字符,第一个下标返回第一个()中的内容,以此类推。

(?exp)匹配exp,并捕获文本到名称为name的组里

(?:exp) 匹配exp,不捕获匹配的文本

(?=exp) 匹配exp前面的位置

(?<=exp) 匹配exp后面的位置

(?!exp) 匹配后面跟的不是exp的位置

(?<!exp) 匹配前面不是exp的位置

如helloworld

第一个(?< name>world)匹配world存入name键中

(?:world)筛选匹配字段,helloworld,但不单独分组。

(?=world)即hello并分组

(?<=world)相反

以上都应有PHP函数preg_match()或preg_
4000
match_all()进行匹配

reg即规则str 即要筛选的字符串

$match 筛选后的结果

两个函数,前者筛选出一个就停止,后者筛选全局。

下面是一些常用的正则表达式在这里分享给大家

中文(utf8)

[\u4e00-\u9fa5]     //通用
[\x{4e00}-\x{9fa5}]     // PHP


url:

((http|https|ftp|telnet|news):\/\/)?([a-z0-9_\-\/\.]+\.[][a-z0-9:;&#@=_~%\?\/\.\,\+\-]+)
^(([a-zA-Z]+)(:\/\/))?([a-zA-Z]+)\.(\w+)\.([\w.]+)(\/([\w]+)\/?)*(\/[a-zA-Z0-9]+\.(\w+))*(\/([\w]+)\/?)*(\?(\w+=?[\w]*))*((&?\w+=?[\w]*))*$


email:

\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
^[a-zA-Z0-9][a-zA-Z0-9._-]*\@[a-zA-Z0-9]+\.[a-zA-Z0-9\.]+$


电话:

\d{3}-\d{8}|\d{4}-\d{7}
^(((010)|(021)|(0\d3,4))( ?)([0-9]{7,8}))|((010|021|0\d{3,4}))([- ]{1,2})([0-9]{7,8})$


手机:

^((13[0-9])|147|(15[0-35-9])|180|182|(18[5-9]))[0-9]{8}$


qq:

[1-9][0-9]{4,}


邮编:

^[1-9]\d{5}$


身份证:

\d{15}|\d{18}
^(([0-9]{15})|([0-9]{18})|([0-9]{17}x))$


IP:

^((([1-9])|((0[1-9])|([1-9][0-9]))|((00[1-9])|(0[1-9][0-9])|((1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))))\.)((([0-9]{1,2})|(([0-1][0-9]{2})|(2[0-4][0-9])|(25[0-5])))\.){2}(([1-9])|((0[1-9])|([1-9][0-9]))|(00[1-9])|(0[1-9][0-9])|((1[0-9]{2})|(2[0-4][0-9])|(25[0-5])))$


时间:时分秒

^(([1-2][0-9]{3}-)((([1-9])|(0[1-9])|(1[0-2]))-)((([1-9])|(0[1-9])|([1-2][0-9])|(3[0-1]))))( ((([0-9])|(([0-1][0-9])|(2[0-3]))):(([0-9])|([0-5][0-9]))(:(([0-9])|([0-5][0-9])))?))?$


HTML:

制表符,换行符,回车符

[\t\n\r]+


html标签:

<([\w-]+?)[^>]*>.*?</\1>|<[\w-]+?[^>]*/>


script:

<script.*?<\/script>


连接:

/<a .*?href="(.*?)".*?>/is


1 数字:`^[0-9]*$`
2 n位的数字:`^\d{n}$`
3 至少n位的数字:`^\d{n,}$`
4 m-n位的数字:`^\d{m,n}$`
5 零和非零开头的数字:`^(0|[1-9][0-9]*)$`
6 非零开头的最多带两位小数的数字:`^([1-9][0-9]*)+(.[0-9]{1,2})?$`
7 带1-2位小数的正数或负数:`^(\-)?\d+(\.\d{1,2})?$`
8 正数、负数、和小数:`^(\-|\+)?\d+(\.\d+)?$`
9 有两位小数的正实数:`^[0-9]+(.[0-9]{2})?$`
10 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
11 非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
12 非零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
13 非负整数:^\d+$ 或 ^[1-9]\d*|0$
14 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
15 非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
16 非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
17 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
18 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
19 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
20 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
21 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
22强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$


总结在这里

正则表达式其实并不难,只要掌握这些语法,在筛选时摸清代码的规律,就可以筛选了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  正则表达式 正则 php