php正则表达式
正则表达式:就是描述字符串排列模式的一种自定义语法规则
注意:如果可以使用字符串处理函数完成的任务,就不要使用正则,有些复杂的操作,只能使用正则完成。
"/\<bck/*&/.?\\//”
- 正则表达式也是一个字符串
- 由具有特殊意义的字符组成
- 具有一点编写规则,也是一种模式
- 可以看作一种编程语言
- 正则表达式必须结合函数使用,否则只是一个字符串
基本格式:/原子和元字符/模式修正符号
在PHP中提供了两套正则表达式函数库
- POSIX扩展正则表达式函数 (ereg_)
- Perl兼容正则表达式函数 (preg_)
函数共能一样,由于Perl效率较高,所有推荐使用Perl兼容正则表达式(POSIX基本被淘汰)
正则表达式语法:
- 定界符号 除了字母、数字和反斜线\以外的任何字符 如:// || { } !! (一般使用//)
- 原子 最基本组成单位(必须)包括所有字符
代表范围的原子
\d (表示任意一个十进制数字)
\D (表示任意一个除数字以外的字符)
\s (表示任意一个空白字符)
\S (表示任意一个非空白)
\w (表示任意一个字,a-z,A-Z,0-9和_)
\W (表示任意一个非字)
自定义原子表[]
[13579],[02468],[a-f],[a-z5-8]
[^a-z]表示取反(必须放在前面)
- 元字符 用来修饰原子的字符 (* + ? . | {} () \b \B)
* 表示前面的原子可以出现0次,1次,多次
+ 表示前面原子可以出现1次,2次,多次
? 表示前面的原子可以出现0次或1次
{} 用于定义前面原子出现的次数 {3} 出现3次;{3,5} 可出现3到5次
. 默认可表示除换行外的任意字符
^ 放在正则表达式开头,表示表达式必须出现在开头
$ 放在正则表达式的末尾,表示表达式必须出现在末尾
| 表示或的关系 (优先级别最低)
\b 表示一个边界
\B 表示一个非边界
() 1.表示大原子使用 如(abc)+ 表示abc可以出现多次,而不是c
2.作为子模式使用,全部匹配作为一个大模式放到数组第一个,每个子模式顺序放
3.可以取消子模式,在()类最前面使用?:
4.反向引用,可以在模式中直接将子模式取出来,再作为正则表达式模式的一部分。
\1取第一个子模式 \n 取第n个子模式 双引号"\\1” 单引号 '\1'
优先级:
\
() (?:) []
* + ? {}
^ $ \b
|
- 模式修正符号 i u
作用:对整个正则表达式调优使用,也可以说对正则表达式功能的扩展
i 不区分大小写
m 默认情况下将字符串视为一行,视为多行后,任何一行都可以以正则开始或结束
s 如果没有使用这个模式修正符号式,元字符中的.默认不能表示换行符
x 表示模式中的空白表示不计
e 正则表达式必须使用在preg_replace替换字符串的函数中时才可以使用
A 表示必须以表达式开头
Z 表示必须以表达式结尾
正则表达式处理函数:
- preg_match(正则表达式,字符串); 匹配函数
正则表达式匹配函数
- preg_match_all(正则表达式,字符串[,数组[,常量]])
用于进行全局正则表达式匹配,即会匹配用括号括起来的子模式
- preg_quote() 会对正则表达式中特定字符的前面加入一个转义字符,这些字符包括:. \\ + * ? [^] $ () {} = ! <> | :
- preg_split(正则表达式,返回数组[,返回个数[,常量]])
用于分割字符串
- preg_grep(正则表达式,数组) 匹配字符串,功能与match差不多,不同之处在于grep对给定的数组进行匹配,并返回一个新的数组。
- preg_replace(正则表达式,替换字符,字符串)
常用正则表达式:
电子邮件: $email='/\w*@\w*\.com/i';
正则表达式匹配函数
手机号码: $phonenum='/^1\d{10}/';
正则表达式匹配函数