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

时间:2022-01-11 19:45:27

正则表达式
又称规则表达式。(英语: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_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}$

总结在这里
正则表达式其实并不难,只要掌握这些语法,在筛选时摸清代码的规律,就可以筛选了。