java源码解析之Regex正则(一)

    本章介绍Regex正则相关的知识。 

    曾几何时,我认为自己接触的所有的知识中最高级的为正则,原因在于它提供了一种模式匹配,并且认为它是很低层的操作。  并且了解到编译器或者汇编器也大量运用了正则,但是这次的了解后或许会更新一些自己的观点。 

    java中的正则接触的较多的有两个:Pattern和Matcher。   中文意思应该是  模式  和  匹配器。    事实证明,Pattern重要性还是高于后者的,源码说话:

《java源码解析之Regex正则(一)》

    可见其本身会依赖于java中的一些工具,以及一些基础的数据类型。 

《java源码解析之Regex正则(一)》

    核心的内容都在图中了。    这里记一下关键字: 线程安全,单例,复用,驻留。 

《java源码解析之Regex正则(一)》

    这里比较重要的是关于分组。  分组的默认序号为:  0表示全匹配。 

《java源码解析之Regex正则(一)》

    与perl语言的关系。 

《java源码解析之Regex正则(一)》

    其类的结构。 

《java源码解析之Regex正则(一)》

《java源码解析之Regex正则(一)》

    可以看到,正则并非原子性操作。 

《java源码解析之Regex正则(一)》

    算是正则匹配的一个比较典型的实现。 

《java源码解析之Regex正则(一)》

《java源码解析之Regex正则(一)》

    但是这里实际的关系应该是:  Pattern调用,Matcher依赖调用。

《java源码解析之Regex正则(一)》

    通过命名识别匹配分组,其实质依然为自动分组。 

《java源码解析之Regex正则(一)》

《java源码解析之Regex正则(一)》

《java源码解析之Regex正则(一)》

《java源码解析之Regex正则(一)》

    对于每个正则中的元字符,背后的实质都是做这样的一些模式匹配。 事实上编译器的词法扫描和语法扫描而很相似。 

《java源码解析之Regex正则(一)》

《java源码解析之Regex正则(一)》

《java源码解析之Regex正则(一)》

《java源码解析之Regex正则(一)》

    需注意,正则的匹配核心是通过节点,Map的实现实际上也是定义了这样的一个节点。   其本质应该是个链式线性结构。 

《java源码解析之Regex正则(一)》

《java源码解析之Regex正则(一)》

    以上便是Pattern的相关的查看。   很乱,很多的逻辑实现没有看因为过于繁杂。 

    原文作者:java源码分析
    原文地址: https://blog.csdn.net/qq_36285943/article/details/80331373
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞