当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2022-07-07
本章介绍Regex正则相关的知识。 曾几何时,我认为自己接触的所有的知识中最高级的为正则,原因在于它提供了一种模式匹配,并且认为它是很低层的操作。 并且了解到编译器或者汇编


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

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

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

java源码解析之Regex正则(一)_编译器

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

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

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

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

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

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

    与perl语言的关系。 

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

    其类的结构。 

java源码解析之Regex正则(一)_编译器_06

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

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

java源码解析之Regex正则(一)_编译器_08

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

java源码解析之Regex正则(一)_编译器_09

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

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

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

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

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

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

java源码解析之Regex正则(一)_编译器_14

java源码解析之Regex正则(一)_编译器_15

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

java源码解析之Regex正则(一)_编译器_16

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

java源码解析之Regex正则(一)_编译器_18

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

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

java源码解析之Regex正则(一)_编译器_20

java源码解析之Regex正则(一)_编译器_21

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

上一篇:java源码解析之Regex正则(二)
下一篇:没有了
网友评论