加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则式进阶(基于Java)

发布时间:2020-12-14 06:37:49 所属栏目:百科 来源:网络整理
导读:零宽断言 零宽断言在不同的平台又叫做环视、预搜索等。 它的名字也代表了它的意思: 1 它相当于一个附加条件。现在把原来的正则式叫做主式子,零宽断言的式子叫做断言式。在搜索正则式的时候不但要满足搜索到的部分满足主式子的条件,并且它的前面或者后面(

零宽断言
零宽断言在不同的平台又叫做环视、预搜索等。
它的名字也代表了它的意思:
<1> 它相当于一个附加条件。现在把原来的正则式叫做主式子,零宽断言的式子叫做断言式。在搜索正则式的时候不但要满足搜索到的部分满足主式子的条件,并且它的前面或者后面(就是环视、断言、预搜索)也要断言式条件。
<2> 但是这个断言式不占用正则式的宽度(零宽)。什么意思呢,就是断言式的作用,除了会判断前后是否匹配外,不产生任何其它的影响。也就是返回的结果、下次匹配的位置等,这个附加条件不产生任何影响,就像只有原来那个主式子一样。

使用方法:
有四种,匹配左边,右边,肯定,否定,组合起来就4中
表达式
(?=Expression) 顺序肯定,表示匹配部分的右侧必须匹配Expression
(?!Expression) 顺序否定,表示匹配部分的右侧不能匹配Expression
(?<=Expression) 逆序肯定,表示匹配部分的左侧必须匹配Expression
(?<!Expression) 逆序否定,表示匹配部分的左侧不能匹配Expression

例子:
"^(?=<)<[^>]+>w+"
用它匹配"<dev>antzone"
首先由正则表达式中的”^”获取控制权,首先由位置0开始进行匹配,它匹配开始位置0,匹配成功,然后控制权转交给”(?=<)”,由于”^”是零宽的(匹配了之后就想它根本不存在一样),所以”(?=<)”也是从位置0处开始匹配,它要求所在的位置右侧必须是字符”<”,位置0的右侧恰好是字符”<”,匹配成功,然后控制权转交个”<”,由于”(?=<)”也是零宽的,所以它也是从位置0处开始匹配,于是匹配成功,后面的匹配过程就不介绍了。

引用
首先有捕获组的概念,也就是正则式匹配中的组。
然后可以使用组编号来引用前面匹配到的内容,然后进行匹配。这就是反向引用。
使用方法,用 数字的方式,表示引用哪一组。比如([ab])1,匹配aabbcc的结果是aa和bb

如果正则式很复杂,编号就会难以计算,所以可以对组进行命名,Java 7 提供了这个功能。
语法是(?<自定义名>expr)
比如(?<year>d{4})-k<year>可以匹配1999-1999

普通捕获组和命名捕获组的混合编号:
这种情况下的编号是按先编入没命名的组,在编入命好名字的组。

还有平衡组与递归匹配,在正则式中添加注释(正则式太长的时候)。这些不是很常用,在Java中都没有提供支持了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读