0x01正则表达式作用
- 用于匹配、替换、截取匹配的字符串
0x02匹配原则
- 最左原则:从目标字符串的最左侧开始,依次匹配
- 最长原则:正则表达式总是会匹配到符合正则表达式要求最长的部分,即贪婪模式
0x03 分割符
正则表达式的开始和结尾
/
#
~
/需要转义,#不需要转义
<?php
$str = 'http://www.baidu.com';
$pattern = '/http://.*com/';//需要转义
preg_match($pattern,$str,$match);
var_dump( $match);
?>
array(1) {
[0]=>
string(20) "http://www.baidu.com"
}
<?php
$str = 'http://www.baidu.com';
$pattern = '#http://.*com#';//不需要转义
preg_match($pattern,$str,$match);
var_dump( $match);
?>
array(1) {
[0]=>
string(20) "http://www.baidu.com"
}
0x04正则表达式中包含的元素
- 原子(普通字符:a-z A-Z 0-9、原子表、转义字符)
- 元字符(有特殊功能的字符)
- 模式修正符(系统内置部分字符)
1、转义字符
d 包含所有数字[0-9]
D 除所有数字外[^0-9]
w 包含所有字符(大小写英文字母、下划线、数字)[a-zA-Z_0-9]
W 除所有字符(大小写英文字母、下划线、数字)外[^a-zA-Z_0-9]
s 空白区域如回车、换行、分页等[f
]
S 非空白区域如回车、换行、分页等[^f
]
//显示不可打印的字符
a 报警
退格
f 换页
换行
回车
制表符
2、元字符
. 匹配任意次(不包括回车换行)
* 匹配任意次
? 匹配0次或1次
+ 匹配1次或多次
| 选择匹配(或)
^ 匹配开头(方括号中表示非)
$ 匹配尾部
{m} 匹配前一个内容重复m次
{m,} 匹配前一个内容重复次数大于等于m次
{m,n} 匹配前一个内容的重复次数m次到n次
() 合并整体匹配
3、模式修正符
i 不区分大小写
m 匹配首内容或尾内容时采用多行识别匹配
s 将转义回车取消视为单行匹配
x 忽略正则中的空白
A 强制从头开始匹配
D 强制$匹配尾部无任何内容
U 进制贪婪匹配,只跟踪到最近的一个匹配符并结束
u 匹配中文
0x05 例
1、单词界定符:
<?php
$str="tom and bob";
$pattern='/an/';
preg_match($pattern, $str,$match);
var_dump($match);
array(1) {
[0]=>
string(2) "an"
}
?>
<?php
$str="tom and bob";
$pattern='/an/';
preg_match($pattern, $str,$match);
var_dump($match);
array(0) {
}
?>
and是一个完整的单词。
修改pattern='/an/'
用于保证必须是一个完整单词才能匹配成功
B表示不用是一个完整单词
2、选择字符 | (或)
Aa|aA 表示Aa或者aA
[] 只能匹配单个字符
| 可以匹配任意长度的字符串
- [a-d] a或者b或c或者d
3、排除字符
[^a-z] 排除小写字母
4、括号字符()
改变限定符(| * ^)的作用范围
(aa|bb)cc 匹配aacc或者bbcc
aa|bbcc 匹配aa或者bbcc
5、
表示第n次匹配到的结果
6、+
"ab*" 0个或者更多b,("a","ab","abbb")
"ab+" 至少一个b,("ab","abb")
7、
"a?b+$" 匹配一个或0个a加上至少一个b结尾的字符串
"ab{2}" 匹配一个a加上后面2个b
"a(bc)*" 匹配一个a加上0个或者一个bc
"a.[0-9]" 匹配一个a加上一个字符再加上一个数字
参考链接:
https://www.php.cn/php-weizijiaocheng-394075.html
https://www.cnblogs.com/hellohell/p/5718319.html
https://www.cnblogs.com/rxbook/p/10912829.html
https://www.cnblogs.com/furuihua/p/12187412.html