正则表达式介绍
在PHP中,正则表达式本质上就是一个字符串.要想正则表达式发挥作用,必须将正则表达式在函数中使用.
正则表达式的函数
PCRE正则函数 pcre
POSIX正则函数
两条正则函数的功能基本相似,但是PCRE使用范围更广,效率更高,所以学习PCRE这套正则函数.
###正则表达式的组成部分
正则表达式由四部分组成:正则定界符,原子和原子修饰符(元字符),模式修正符
###正则定界符
用于定义正则边界的符号就是正则定界符.
除了数字,字母和\之外的字符都可以用来当做正则表达式的定界符使用(在PHP中),推荐使用/作为正则的定界符.
###原子
组成正则表达式的最小单位就是原子.
1.所有可见的字符都是原子.
2.所有不可见字符都是原子.
既有特殊意义的原子.
\d 表示0-9的数字
\D 表示除了0-9之外的所有字符
\s 表示所有不可见字符
\S 表示所有可见字符
\w 表示数字,字母和_
\W 表示除了数字,字母和_之外的字符
无论哪种原子都表示一个字符!!
###元字符
元字符也叫作原子修饰符.
[] 原子列表
可以指定当前原子的范围,但是原子列表也仅仅表示列表中的一个原子.
格式: [原子原子原子...]
如果多个原子是连续的,可以使用-连接,例如[123456] -> [1-6]
[^] 排除列表
原子列表的反向应用,表示除了列表之外的字符中的任意一个.
+ 表示一个以上的原子 >=1
* 表示任意个原子 >=0
? 表示0个或1个原子
{m} 表示m个原子
{m,} 表示m个以上的原子
{m,n} 表示m-n个原子
^ 表示必须以制定的字符开头
$ 表示必须以制定的字符结尾
^$ 表示精确查找制定的字符 格式:^规则$
. 表示任意一个字符除了\n
\b 表示词边界
常见的词边界一般为,空格,标点符号,特殊字符,行的开头和结束,回车换行.
\B 表示非词边界
属于任何英文单词的内容字符都是非词边界,英文,数字和_
| 表示选择关系
注意:表示在|左侧字符和|右侧字符中进行选择,如果需要限定字符,加()解决,只能选一个,不能两个都选。
() 1.改变优先级
2.将多个原子视为一个原子处理
3.将内容暂存于内存(模式单元)
###模式修正符
i ignore 忽略大小写
m multiline 多行匹配模式
x 忽略正则表达式中的所有空白字符
U 改变贪婪模式(正则表达式默认就是贪婪模式)
在正则表达式中使用.*?组合就 表示非贪婪模式.
###正则函数
preg_match 进行一次正则匹配
preg_match_all 进行多次正则匹配
$pattern='/[a-z]+/';
$str = '最近baidu不太平,baidu又摊上事情了,为baidu默哀';
$num=preg_match($pattern,$str,$result);
$num=preg_match_all($pattern,$str,$result);
echo $num;
var_dump($result);
preg_grep数组过滤
$pattern='/\d+/';
$str =array(123123,'ASDASD',345345,'HYUYRTHJU');
$result=preg_grep($pattern,$str);
var_dump($result);
preg_split 正则切割
$str = 'ad1fk1hgds1gfj1fad1gfh1sagf';
$result=explode('1',$str);
$str = 'ad1fk2hgds3gfj4fad5gfh6sagf';
$result=preg_split('/\d/',$str);
var_dump($result);
执行正则表达式的搜索和替换
$result=preg_replace($pattern,$replace,$str);