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 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

求php完整代码 使用正则表达式检索用户输入的查询关键字,并描红

PHP编程中经常用到的正则表达式代码分享

循环通过 python 正则表达式匹配

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串