PCRE

1 .是一个 perl 库,包含了 perl 兼容的正则表达式库,用来解决C语言中正则的使用问题
2 .PHP使用 PCRE 扩展兼容 perl,实现正则
3 .PHP中的正则表达式需要用定界符包围
不能是字母数字反斜线, 正则中出现了定界符需要转义

PHP PCRE函数

1 . preg_match(string $pattern,string $string [,array $matches]);

正则是否匹配字符串 返回 0 和 1
用正则表达式 $pattern 匹配 $string
如果写了 $matches ,$matches[0] 填充的是匹配到的文本
返回的是匹配次数, 但是匹配到1次就停止了,所以返回最高1次
$subject = ' 1 2 3';
$pattern = '/\s/';
$rs = preg_match($pattern,$subject,$res);
var_dump($rs);
var_dump($res);

2 . preg_match_all(string $pattern,string $string [,array $matches]);

正则是否匹配字符串 返回匹配次数

正则语法

由各种字符(普通,非打印,元字符)组合成表达式, 可以有多个表达式, 子表达式
然后对表达式进行 限定, 定位, 运算等 去匹配相应(数量)的字符

1 . 普通字符和非打印字符

非打印字符是不可见字符, 常见以下
字符描述
\n换行符
\f换页符
\r回车符
\s匹配空白字符
\S匹配非空白字符

2 . 特殊字符

特殊字符包括部分 限定符 和 定位符
要匹配字符本身需要转义
字符|描述
\把下一个字符转义 或变成特殊字符
()用来包围子表达式, 俩个符号表示子表达式的开始和结束
|俩项之间的选择,表示"或"
[]中括号表达式的开始和结束

3 . 限定符

用来限定表达式的一个组件出现多少次可以满足匹配
字符|描述
?出现0次或1次
+出现1次或多次
*出现0次或多次
{n}n为非负整数, 限定出现n次
{n,}n为非负整数,限定最少出现n次
{n,m}n,m为非负整数, m>=n, 最少出现n次,最多出现m次
4 . 定位符
限定要匹配的边界
字符|描述
^匹配字符串开头的内容
$匹配字符串结尾的内容
b单词的边界匹配 以*开头或结尾
B非单词边界匹配

5 . 元字符

常用元字符见下
符号|描述
.匹配除了换行外任意一个字符
??紧跟在贪婪限定符后面,用于将匹配模式修改成非贪婪模式
[xyz]字符集合 匹配集合中的任一个字符
[^xyz]字符非集合 匹配除集合中的任一个字符
[a-z]字符范围 匹配范围内任一字符
[^a-z]字符非范围 匹配除范围内任一字符
\d匹配一个数字字符 等价于 [0-9]
\D匹配一个非数字字符
\f \n \r \s \S \t \v匹配一个 换页、换行、回车、空白、非空白、制表、垂直制表符
\w匹配 字母数字下划线
\W匹配 非字母数字下划线

正则使用

1 . 贪婪与非贪婪

+和* 是贪婪限定符, 默认是最大匹配。当想使用最小匹配时,可以用?跟在贪婪限定符后,实现非贪婪模式
$string = '<h1>aaaaaaaaaaaaaaa</h1>';
//    贪婪模式
$ustr = '/<.+>/';
//    匹配结果,第一个 < 到最后一个 > 之间所有内容
//    <h1>aaaaaaaaaaaaaaa</h1>

//    非贪婪(最小匹配)
$ustr = '/<.+?>/';
//    匹配结果,第一个 < 到第一个 > 之间的内容
//    <h1>