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次以上,但尽可能少重复

你可能感兴趣的:(PHP核心技术与最佳实践 读书笔记 第三章 正则表达式基础与应用)