正则表达式进阶
- 或 | 的小细节
替换匹配 | 任一侧最大的表达式
2.正则表达式和相应编码
https://blog.csdn.net/xyls12345/article/details/23942533
https://blog.csdn.net/John8169/article/details/52442736
3.正则表达式引擎
举例简单说明NFA与DFA工作的区别:
比如有字符串this is yansen’s blog,正则表达式为 /ya(msen|nsen|nsem)/ (不要在乎表达式怎么样,这里只是为了说明引擎间的工作区别)。 NFA工作方式如下,先在字符串中查找 y 然后匹配其后是否为 a ,如果是 a 则继续,查找其后是否为 m 如果不是则匹配其后是否为 n (此时淘汰msen选择支)。然后继续看其后是否依次为 s,e,接着测试是否为 n ,是 n 则匹配成功,不是则测试是否为 m 。为什么是 m ?因为 NFA 工作方式是以正则表达式为标准,反复测试字符串,这样同样一个字符串有可能被反复测试了很多次!
而DFA则不是如此,DFA会从 this 中 t 开始依次查找 y,定位到 y ,已知其后为a,则查看表达式是否有 a ,此处正好有a 。然后字符串a 后为n ,DFA依次测试表达式,此时 msen 不符合要求淘汰。nsen 和 nsem 符合要求,然后DFA依次检查字符串,检测到sen 中的 n 时只有nsen 分支符合,则匹配成功!
由此可以看出来,两种引擎的工作方式完全不同,一个(NFA)以表达式为主导,一个(DFA)以文本为主导!一般而论,DFA引擎则搜索更快一些!但是NFA以表达式为主导,反而更容易操纵,因此一般程序员更偏爱NFA引擎! 两种引擎各有所长,而真正的引用则取决与你的需要以及所使用的语言。
4.正则表达式的一些解释
https://blog.csdn.net/mybc724/article/details/45956057
5.正则表达式非获取匹配
https://www.cnblogs.com/keystone/articles/10709819.html
[外链图片转存失败(img-GZwPz4Op-1563333893566)(en-resource://database/3209:0)]
6.正则表达式正向预查和反向预查(不消耗字符)
期望后面是什么,期望前面应该是什么
预查也就是说只匹配符合子模式的字符,(子模式,不作为匹配结果),,子模式是非获取匹配
https://blog.csdn.net/u013908207/article/details/20472827