;

1.方括号内的特殊符号除了方括号符号,其实可以不加转义符号,例如:/ab[.*]c/和/ab[\.\*]c/等效 参考:捕获,http://www.cnblogs.com/pmars/archive/2011/12/30/2307507.html

正则表达式(三)-补充 2017年8月25日
;

不懂正则引擎原理的情况下,同样可以写出满足需求的正则,但是不知道原理,却很难写出高效且没有隐患的正则。所以对于经常使用正则,或是有兴趣深入学习正则的人,还是有必要了解一下正则引擎的匹配原理的。 1.为什么要了解引擎匹配原理 一个个音符杂乱无章的组合在一起,弹奏出的或许就是噪音,同样的音符经过作曲家的手,就可以谱出非常动听的乐曲,一个演奏者同样可以照着乐谱奏出动听的乐曲,但他/她或许不知道该如何去改变音符的组合,使得乐曲更动听。 作为正则的使用者也一样,不懂正则引擎原理的情况下,同样可以写出满足需求的正则,但是不知道原理,却很难写出高效且没有隐患的正则。所以对于经常使用正则,或是有兴趣深入学习正则的人,还是有必要了解一下正则引擎的匹配原理的。 2.正则表达式引擎 正则引擎大体上可分为不同的两类:DFA和NFA,而NFA又基本上可以分为传统型NFA和POSIX NFA。 DFA Deterministic finite automaton 确定型有穷自动机 NFA Non-deterministic finite automaton 非确定型有穷自动机 Traditional NFA POSIX NFA DFA引擎因为不需要回溯,所以匹配快速,但不支持捕获组,所以也就不支持反向引用和$number这种引用方式,目前使用DFA引擎的语言和工具主要有…

NFA引擎匹配原理 2017年8月23日
;

零宽断言 环视/预查 反向引用 环视/预查(lookaround) (?<=…),(?<!…),(?=…),(?!…) 忽略量化词/非贪婪模式 (??,*?,+?,{m,n}?,{m,}?) 1.后向引用 使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。 组号分配说明: ①.分组0对应整个正则表达式 ②.实际上组号分配过程是要从左向右扫描两遍的:第一遍只给未命名组分配,第二遍只给命名组分配--因此所有命名组的组号都大于未命名的组号 ③.你可以使用(?:exp)这样的语法来剥夺一个分组对组号分配的参与权. 后向引用用于重复搜索前面某个分组匹配的文本。例如,\1代表分组1匹配的文本。 \b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的…

正则表达式(二)-进阶 2017年8月23日
;

结构 定界符:多种都可以,常用为// 原子:最少的一个匹配单位(放在定界符中),在一个正则表达式中,至少要有一个原子 元字符:元字符不能单独使用,修饰原子,是用来扩展原子功能和限定功能的,(写在定界符号中) 模式修正符号:修正,对模式(正则)修正,(写在定界符号右边) 备注: 1.正则表达式为一个字符串,单引号双引号有区别,优先使用单引号(双引号内认转义字符,单引号内不认转义字符) 2.定界符不仅局限于“//”。除了字母,数字和斜线“\”以外的任何字符都可以作为定界符,像“#”,“|”,“!”等都可以的。 3.打印字符指键盘上所有可以显示出来的字符,非打印值无法显示的字符,比如,回车,换行 4.\转义字符, (1)可以将有意义的字符转成没有意义的原子字符(将有意义变为原子)。 (2)可以将没有意义的字符转成有意义的原子(比如:\t,tab键) (3)所有没有意义的字符,加了转义也没有意义的,可加可不加(比如:/a/和/\a/,/@/和/\@/,/9/和/\9/),php有个函数专门识别那些属于有意义的字符 5.常用非打印字符 非打印字符 含义描述 \cx 匹配由x指明的控制字符。如\cM匹配一个Control-M或回车符。x的值必须为A~Z或a~z之一 \f 匹配一个换页符。等价于\x0c或\cL \n 匹配一个换行符。等价于\x0a或\cJ…

正则表达式(一)-基础 2017年8月21日