正则表达式就是用某种模式去匹配一类字符串的公式。
Perl和.NET对正则表达式的支持最为强大,而Javascript对正则表达式的支持则比较“朴素”。
NFA和DFA
PHP有两套正则函数 :PCRE库的 preg_ 和POSIX扩展的ereg_(不推荐)
分隔符,表达式和修饰符
分隔符:是除了字母,数字,反斜线以及空白字符意外的任何字符(如/ ! # % | ~等)
表达式:由一些特殊字符和非特殊的字符串组成
修饰符:用于开启或者关闭某种功能/模式
RegexTester Firefox扩展Regular Expression Tester
\b 是正则表达式规定的一个特殊代码,代表单词的开头或者结尾,也就是单词的分界处。
点号.是元字符,匹配除了换行符以外的任意字符。 *同样是元字符,它指定“*”前面的内容可以连续重复使用任意次以使整个表达式得到匹配。
元字符(Meta-Characters)是正则表达式中具有特殊意义的专用字符,用来规定其前导字符在目标对象中的出现模式。
元字符 | 描述 |
---|---|
. | 匹配除换行符以外的任何字符 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
- | 表示范围 |
[] | 匹配括号中的任意一个字符 |
* + ? | 量词 |
限定符代码/语法 | 描述 |
---|---|
* | 重复0次或更多次 |
+ | 重复1次或更多次 |
? | 重复0次或者1次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n此到m次 |
[]匹配单个字符,尽管看起来[]里有好多字符
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);
常用反义 | 描述 |
---|---|
\W | 匹配任意不是字母,数字,下划线,汉子的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或者结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字符以外的任意字符 |
|表示分支
重复一组字符
用 (表达式)
反向引用用于重复搜索前面某个分组匹配的文本。
后一个例子没看懂 略过
只有断言为真时才会继续进行匹配。
1 顺序肯定环视(?=exp)
2 逆序肯定环视(?<=exp)
3 顺序否定环视(?!exp)
4 逆顺否定环视(?<!exp)
最先开始的匹配拥有最高优先权
懒惰限定符
懒惰限定符代码/语法 | 描述 |
---|---|
*? | 重复任意次,但尽可能少重复 |
+? | 重复1次或更多次,但尽可能少重复 |
?? | 重复0次或1次,但尽可能少重复 |
{n,m}? | 重复n到m次,但尽可能少重复 |
{n,}? | 重复n次以上,但尽可能少重复 |