PHP核心技术与最佳实践 读书笔记 第三章 正则表达式基础与应用

第三章 正则表达式基础与应用

3.1 认识正则表达式

正则表达式就是用某种模式去匹配一类字符串的公式。

Perl和.NET对正则表达式的支持最为强大,而Javascript对正则表达式的支持则比较“朴素”。

3.1.1 PHP中的正则函数

NFA和DFA

PHP有两套正则函数 :PCRE库的 preg_ 和POSIX扩展的ereg_(不推荐)

3.1.2 正则表达式的组成

分隔符,表达式和修饰符

分隔符:是除了字母,数字,反斜线以及空白字符意外的任何字符(如/ ! # % | ~等)

表达式:由一些特殊字符和非特殊的字符串组成

修饰符:用于开启或者关闭某种功能/模式

3.1.3 测试工具的使用

RegexTester Firefox扩展Regular Expression Tester

3.2 正则表达式中的元字符

\b 是正则表达式规定的一个特殊代码,代表单词的开头或者结尾,也就是单词的分界处。

点号.是元字符,匹配除了换行符以外的任意字符。 *同样是元字符,它指定“*”前面的内容可以连续重复使用任意次以使整个表达式得到匹配。

3.2.1 什么是元字符

元字符(Meta-Characters)是正则表达式中具有特殊意义的专用字符,用来规定其前导字符在目标对象中的出现模式。

元字符

描述

.

匹配除换行符以外的任何字符

\w

匹配字母或数字或下划线或汉字

\s

匹配任意空白符

\d

匹配数字

\b

匹配单词的开始或结束

^

匹配字符串的开始

$

匹配字符串的结束

-

表示范围

[]

匹配括号中的任意一个字符

* + ?

量词

3.2.2 起始和结束元字符

3.2.3 点号

3.2.4 量词

限定符代码/语法

描述

*

重复0次或更多次

+

重复1次或更多次

?

重复0次或者1次

{n}

重复n次

{n,}

重复n次或更多次

{n,m}

重复n此到m次

3.3 正则表达式匹配规则

3.3.1 字符组

[]匹配单个字符,尽管看起来[]里有好多字符

3.3.2 转义

Javascript \r\n代表换行 alert("可以换行\r\n第二行");

PHP转义符\ \Q和\E也可以在模式中忽略正则表达式元字符 \Q和\E之间的元字符都会作为普通字符来匹配

$reg="#[aby\{]#";
$str='a\bc[]{}';
preg_match_all($reg,$str,$m);
var_dump($m);

3.3.3 反义

常用反义

描述

\W

匹配任意不是字母,数字,下划线,汉子的字符

\S

匹配任意不是空白符的字符

\D

匹配任意非数字的字符

\B

匹配不是单词开头或者结束的位置

[^x]

匹配除了x以外的任意字符

[^aeiou]

匹配除了aeiou这几个字符以外的任意字符

3.3.4 分支

|表示分支

3.3.5 分组

重复一组字符

用 (表达式)

3.3.6 反向引用

反向引用用于重复搜索前面某个分组匹配的文本。

后一个例子没看懂 略过

3.3.7 环视

只有断言为真时才会继续进行匹配。

1 顺序肯定环视(?=exp)

2 逆序肯定环视(?<=exp)

3 顺序否定环视(?!exp)

4 逆顺否定环视(?<!exp)

3.3.8 贪婪/懒惰匹配模式

最先开始的匹配拥有最高优先权

懒惰限定符

懒惰限定符代码/语法

描述

*?

重复任意次,但尽可能少重复

+?

重复1次或更多次,但尽可能少重复

??

重复0次或1次,但尽可能少重复

{n,m}?

重复n到m次,但尽可能少重复

{n,}?

重复n次以上,但尽可能少重复

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券