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

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

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

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

java源码解析之Regex正则(一)_第1张图片

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

java源码解析之Regex正则(一)_第2张图片

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

java源码解析之Regex正则(一)_第3张图片

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

java源码解析之Regex正则(一)_第4张图片

    与perl语言的关系。 

java源码解析之Regex正则(一)_第5张图片

    其类的结构。 

java源码解析之Regex正则(一)_第6张图片

java源码解析之Regex正则(一)_第7张图片

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

java源码解析之Regex正则(一)_第8张图片

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

java源码解析之Regex正则(一)_第9张图片

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

java源码解析之Regex正则(一)_第10张图片

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

java源码解析之Regex正则(一)_第11张图片

java源码解析之Regex正则(一)_第12张图片

java源码解析之Regex正则(一)_第13张图片

java源码解析之Regex正则(一)_第14张图片

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

java源码解析之Regex正则(一)_第15张图片

java源码解析之Regex正则(一)_第16张图片

java源码解析之Regex正则(一)_第17张图片

java源码解析之Regex正则(一)_第18张图片

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

java源码解析之Regex正则(一)_第19张图片

java源码解析之Regex正则(一)_第20张图片

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

你可能感兴趣的:(java基础源码查看)