php 正则表达式
Posted 素衣居士
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 正则表达式相关的知识,希望对你有一定的参考价值。
php 正则表达式
1界定符
标识一个正则表达式的开始和结束,用‘/‘
如:‘/[0-9]/‘
2原子:
可见原子:Unicode编码表中可用键盘输出后肉眼可见的字符,例如:标点 ; . / ? 或者英文字母,汉字等等可见字符
不可见原子:Unicode编码表中可用键盘输出后肉眼不可见的字符,例如:换行符
,Tab制表符 , 空格等等,
一般只用这三个(换行符一般和其他字符一起匹配,因为只有换行符是匹配不到的)
小提示:匹配运算符前面需要加‘‘ 例如:‘+‘ 号,匹配的话需要写出 ‘+‘
元字符
原子的筛选方式:
| 匹配两个或者多个分支选择
[] 匹配方括号中的任意一个原子
[^] 匹配除方括号中的原子之外的任意字符;
例子:Duang|duang 或者 [Dd]uang 都可以匹配到Duang和duang
区间写法:[a-z]匹配a到z的字符, [0-9]匹配0到9的字符。也可以[a-z0-9]
. 匹配除换行符之外的任意字符
d 匹配任意一个十进制数字,即{0-9]
D 匹配任意一个非十进制数字[^0-9] 相当于[^d]
s 匹配一个不可见的原子,即[f
v]
S 匹配一个可见的原子,即[^f
v],相当于[^s]z
w 匹配任意一个数字、字母或下划线,即[0-9a-zA-Z_]
W 匹配任意一个非数字、字母或下划线,[^0-9a-zA-Z_],相当于[^w]
量词
{n} 表示其前面的原子刚好出现了n次。
[n] 表示其前面的原子最少出现n次
{n,m} 最少出现n次,最多出现m次
* 匹配0次、一次或者多次,即{0,}
+ 匹配一次或多次,即{1,}
? 匹配0或1次,即{0,1}
边界控制
^ 匹配字符串开始的位置
$ 匹配字符串结尾的位置
例:^John 可以匹配到:John 但是匹配不到:123John,因为规定了字符串以John开头
模式单元
{} 匹配其中的整体为一个原子
修正模式
常见的修正模式:
U 懒惰匹配
i 忽略英文字母的大小写
x 忽略正则表达式的空白符
s 让元字符‘.‘ 匹配包括换行符在内的所有字符
常用函数
preg_match
执行匹配正则表达式
preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) : int
pattern: 要搜索的模式,字符串类型。
subject:输入字符串。
match: 如果提供了参数matches,它将被填充为搜索结果,数据结构为一维数组。
flags: 可以设置为PREG_OFFSET_CAPTURE,使用搜索结果的第0个元素为匹配的字符串,第1个元素为对应的偏移量(位置)
offset: 搜索从目标字符串的起始位置开始匹配。
返回值:匹配次数
类似函数preg_match_all,参数与preg_match一致
区别:
preg_match:只匹配一次,搜索结构match的数据结果为一维数组
preg_match_all:匹配全部,搜索结果match的数据结构为二维数组。
例子:
$str = "wentutu@163.com.cn";
//匹配所有的邮箱
/**
* ^[a-z] 必须是字母开头
* ([a-z0-9]*[-_]?[a-z0-9]+)
* [a-z0-9]* 0个或者多个字母或者数字
* [-_]? 0个或者1个‘-‘或者‘_‘
* [a-z0-9]+ 1个或者多个数字或者字母
* @ 邮箱必需有个有@
* [.] 一个‘.‘ ‘. + *‘ 需要在前面‘. + *‘转义
* [a-z]{2,3} 匹配2-3字母
*
* ([.][a-z]{2})? 匹配0个或者1个 (.2个字母)
* i 表示忽略大小写
*/
$reg="/^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?$/i";
echo preg_match($reg,$str);//1
以上是关于php 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性