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