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>