一、原子
原子 | 描述 |
---|---|
普通字符 | 可打印的字符,在屏幕可看到的字符,如大小写字母、数字等 |
非打印字符 | 即存在但不可显示字符,如回车、换行、制表符等 |
自定义字符 | 可以是一个,也可以是集合,用方括号'[ ]'包起来 |
1.普通字符
示例 | 描述 |
---|---|
a-z | 匹配单个小写字母 |
A-Z | 匹配单个大写字母 |
0-9 | 匹配单个数字 |
代码示例:
$pattem = '/a/'; $subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果
2.非打印字符
示例 | 描述 |
---|---|
\n | 匹配一个换行符,等价于:\x0a |
\r | 匹配一个回车符,等价于:\x0d |
\f | 匹配一个换页符,等价于:\x0c |
\t | 匹配一个制表符,等价于:\x09 |
\v | 匹配一个垂直制表符,等价于:\x0b |
代码示例:
$pattem = '/\n/'; $subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果
3.自定义字符
示例 | 描述 |
---|---|
[1234] | 匹配 1、2、3、4 数字 |
[0-9] | 匹配数字集合 |
[a-z] | 匹配小写字母集合 |
[A-Z] | 匹配大写字母集合 |
[0-9a-zA-Z] | 匹配数字、小写字母、大写字母集合 |
代码示例:
$pattem = '/[a-z]/';
$subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
二、元字符
- 元字符是修饰原子字符的,可以理解为原子的定语或限定条件
- 元字符不允许单独使用,必须配合原子,共同工作
( . ) 括号里的匹配符,匹配除换行符之外的任意一个字符
示例 | 描述 |
---|---|
12. | 匹配两个数字,在加任意一个字符 |
zhu. | 匹配两个小写字母,在加任意一个字符 |
OU. | 匹配两个大写字母,在加任意一个字符 |
代码示例:
$pattem = '/12./';
$subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk OUYANGKE OUYANGKE zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
( | ) 括号里的匹配符,匹配 2 个或多个分支
示例 | 描述 |
---|---|
12|67 | 匹配 12 和 67 |
ou|zhu | 匹配 ou 和 zhu |
代码示例:
$pattem = '/12|67/';
$subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
( [ ] ) 括号里的匹配符,匹配方括号内指定的任意一个原子
示例 | 描述 |
---|---|
[1234] | 匹配 1、2、3、4 数字 |
[0-9] | 匹配数字集合 |
[a-z] | 匹配小写字母集合 |
[A-Z] | 匹配大写字母集合 |
[0-9a-zA-Z] | 匹配数字、小写字母、大写字母集合 |
代码示例:
$pattem = '/[1234]/';
$subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
( [^ ] ) 括号里的匹配符, 匹配除方括号内指定原子以外的任意一个原子
示例 | 描述 |
---|---|
[^1234] | 匹配去除 1、2、3、4 数字 |
[^0-9] | 匹配去除数字集合 |
[^a-z] | 匹配去除小写字母集合 |
[^A-Z] | 匹配去除大写字母集合 |
[^0-9a-za-z] | 匹配去除数字、小写字母、大写字母集合 |
代码示例:
$pattem = '/[^1234]/';
$subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
( ^ ) 括号里的匹配符,匹配字符串开始位置,一串字符串,必须从这里开始
示例 | 描述 |
---|---|
^1 | 匹配从 1 数字开始 |
^[0-9] | 匹配从数字集合开始 |
^[a-z] | 匹配从小写字母集合开始 |
^[A-Z] | 匹配从大写字母集合开始 |
^[0-9a-zA-Z] | 匹配从数字、小写字母、大写字母集合开始 |
代码示例:
$pattem = '/^[a-z]/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
( $ ) 括号里的匹配符,匹配字符串结束位置
示例 | 描述 |
---|---|
[0-9]$ | 匹配从数字集合结束 |
[a-z]$ | 匹配从小写字母集合结束 |
[A-Z]$ | 匹配从大写字母集合结束 |
[0-9a-zA-Z]$ | 匹配从数字、小写字母、大写字母集合结束 |
代码示例:
$pattem = '/[a-z]$/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
三、量词(限定符)
{n} 表示前面原子出现 n 次
示例 | 描述 |
---|---|
[0-9]{3} | 匹配从数字连续出现 3 次 |
[a-z]{3} | 匹配从小写字母集合连续出现 3 次 |
[A-Z]{3} | 匹配从大写字母集合连续出现 3 次 |
[0-9a-zA-Z]{3} | 匹配从数字、小写字母、大写字母集合连续出现 3 次 |
代码示例:
$pattem = '/[0-9]{3}/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
{n,} 表示前面原子出现不少于 n 次
示例 | 描述 |
---|---|
[0-9]{1,} | 匹配从数字连续出现 1 次或多次 |
[a-z]{1,} | 匹配从小写字母集合连续出现 1 次或多次 |
[A-Z]{1,} | 匹配从大写字母集合连续出现 1 次或多次 |
[0-9a-zA-Z]{1,} | 匹配从数字、小写字母、大写字母集合连续出现 1 次或多次 |
代码示例:
$pattem = '/[0-9]{1,}/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
{n,m} 表示前面原子至少出现 n 次,最多出现 m 次
示例 | 描述 |
---|---|
[0-9]{1,3} | 匹配从数字连续出现 1 次或 3 次 |
[a-z]{1,3} | 匹配从小写字母集合连续出现 1 次或 3 次 |
[A-Z]{1,3} | 匹配从大写字母集合连续出现 1 次或 3 次 |
[0-9a-zA-Z]{1,3} | 匹配从数字、小写字母、大写字母集合连续出现 1 次或 3 次 |
代码示例:
$pattem = '/[0-9]{1,3}/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
( * ) 匹配 0 次、1 次或多次前面原子
示例 | 描述 |
---|---|
[0-9]* | 匹配从数字连续出现 0 次、1 次或多次 |
[a-z]* | 匹配从小写字母集合连续出现 0 次、1 次或多次 |
[A-Z]* | 匹配从大写字母集合连续出现 0 次、1 次或多次 |
[0-9a-zA-Z]* | 匹配从数字、小写字母、大写字母集合连续出现 0 次、1 次或多次 |
代码示例:
$pattem = '/[0-9]*/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果
( + ) 匹配 1 次或多次前面原子
示例 | 描述 |
---|---|
[0-9]+ | 匹配从数字连续出现 1 次或多次 |
[a-z]+ | 匹配从小写字母集合连续出现 1 次或多次 |
[A-Z]+ | 匹配从大写字母集合连续出现 1 次或多次 |
[0-9a-zA-Z]+ | 匹配从数字、小写字母、大写字母集合连续出现 1 次或多次 |
代码示例:
$pattem = '/[0-9]+/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
(?) 匹配 0 次或 1 次前面原子
示例 | 描述 |
---|---|
[0-9]? | 匹配从数字连续出现 0 次或 1 次 |
[a-z]? | 匹配从小写字母集合连续出现 0 次或 1 次 |
[A-Z]? | 匹配从大写字母集合连续出现 0 次或 1 次 |
[0-9a-zA-Z]? | 匹配从数字、小写字母、大写字母集合连续出现 0 次或 1 次 |
代码示例:
$pattem = '/[0-9]?/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
四、预定义字符
\d 匹配任意一个十进制数
- 等价于 [0-9]
代码示例:
$pattem = '/\d/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
\D 匹配任意一个除十进制以外的字符
- 等价于 [^0-9]
代码示例:
$pattem = '/\D/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
\w 匹配任意一个字母/数字/下划线字符
- 等价于 [0-9a-zA-Z_]
代码示例:
$pattem = '/\w/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
\W 匹配任意一个除字母/数字/下划线之外的字符
- 等价于 [^0-9a-za-z_]
代码示例:
$pattem = '/\W/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
\s 匹配任意一个空白字符(非打印)
代码示例:
$pattem = '/\s/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
\S 匹配任意一个除空白字符以外的字符
代码示例:
$pattem = '/\S/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
\b 匹配单词边界
代码示例:
$pattem = '/ouyangke\b/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
\B 匹配除单词边界以外的部分
代码示例:
$pattem = '/yang\B/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
五、特殊字符
- 特殊字符需要在符号前面增加\转义
- 需转义符号: \ * + ? . | ^ $
代码示例:
$pattem = '/ \+ /';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk * + ? . | ^ $ [ ] ( ) ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
六、分组符
- ( ) 匹配其整体为一个原子[模式单元],即多个原子组成的大原子
代码示例:
$pattem = '/(欧阳克|朱老师)|([0-9])/';
$subject = '我是欧阳克 我是朱老师 asdfsdf212fdhdfgh54674fghjfghjk78907dfghdfghdfgh';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
七、界定符
/ / 符号是正则表达式的界定符,里面包裹正则表达式。
八、修正符(在界定符后面)
多个修正符可以组合在一起使用
( U ) 表示取消贪婪模式
- 正则表达式有:贪婪模式和懒惰模式
- 正则表达式默认是贪婪模式
代码示例 1:
$pattem = '/ou.*/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
代码示例 2:
$pattem = '/ou.*/U';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
( i ) 表示和模式进行匹配时忽略大小写
代码示例:
$pattem = '/ouyangke/i';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk OUYANGKE OUYANGKE ZHULAOSHI ZHULAOSHI';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
( s ) 被匹配的字符串将视为一行来看,包括换行符,换行符将被视为普通字符串。
- ( . ) 括号里的匹配符,匹配除换行符之外的任意一个字符
代码示例:
$pattem = '/OUYANG.KE/s';
$subject = "a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk\n OUYANG\nKE OUYANG\nKE ZHULAOSHI ZHULAOSHI";
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
( x ) 模式中的空白忽略不计
代码示例:
$pattem = '/ 0
0
0/x';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk\n OUYANGKE OUYANGKE ZHULAOSHI ZHULAOSHI';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a); // 输出匹配次数
var_dump($matches); // 输出匹配结果
九、正则表达式优先级(1 级最大)
级别 | 符号 | 解释 |
---|---|---|
1 | \ | 转义字符 |
2 | ( )、 ( ?: )、 ( ?= )、 [ ]、 | 模式单元与原子表 |
3 | *、 +、 ?、 {n}、 {n,}、 {n,m} | 重复匹配 |
4 | ^、 $、 \b、 \B | 边界匹配 |
5 | | | 模式选择 |