正则是用来处理字符串一种文字模式,可以匹配,查找,替换,分割字符串。正则是有原子(普通字符串),一些特殊含义的字符,和定界符,模式修正符组成的。
定界符表示已经写完了正则表达式,一般用/来表示。
原子是任意字符,不同一些对于正则来说特殊的字符需要转义后后才能使用,如 . + * ?
一些规定的简易化特殊字符:d匹配任意数字,D出数字外字符,w数字和字母,下划线 W s任意空白字符
元子符:
*零次,一次或是多次
+一次或多次
?零次或是一次
.除了换行符以外的任意字符
|分支选择
{N},{n,m}
^或是A匹配开头
$或是匹配结尾
匹配单词边界
B不匹配单词边界
[]
[^]
()
例子:
匹配this is test
边界限制:
/^this/ 匹配this开头的字符串
/test$/ 匹配test结尾的字符串
/is/ 匹配左右都有边界的is字符,只有is符合
/Bis/ 匹配右边有边界的字符 只有this符合
模式修正符:
i 不区分大小写
m将字符串视为多行
s如果设定了,.将匹配任意字符包括换行符
x模式中的空白负略不计
U反转了匹配数量的值,使其不是默认的重复,除非加上了?才会重复,也可以在数量符后加一个?使其不重复,如.*?,{n}?,此修正符可能是PHP独有。
例子:如匹配abcdefgabcdefgabcde
/a.*e/将会匹配整个字符串,/a.*?e/和/a.*e/U将会匹配abcde,
/Web Server/x将会负略空格符也可以匹配出WebServer.
/^is/m 会匹配出 this is test中的is test
常见匹配规则:
email:
/w+([-+.]w)*@w+([-.]w)*.w+([-.]w)*/
URL:/^http[s]?://([w-]+.)+[w-]+([w-./?%&=]*)?$/
中文:/^[u4E00-u9FA5uF900-uFA2D]+$/
ASCII字符串:^[x00-xFF]+$
IP:/(25[0-5]|2[0-4]d|1d{2}|[1-9]?d).25[0-5]|2[0-4]d|1d{2}|[1-9]?d.25[0-5]|2[0-4]d|1d{2}|[1-9]?d.25[0-5]|2[0-4]d|1d{2}|[1-9]?d)*/