Java中 正则表达式中 组 是怎么用的?我看了n遍,没看懂

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中 正则表达式中 组 是怎么用的?我看了n遍,没看懂相关的知识,希望对你有一定的参考价值。

组其实就是用来提取正则中匹配到的内容。
比如有正则表达式:abc(\d2,5)efg,这个正则本身的意思很简单,就是字符串abc和efg之间有2到5个数字,所以字符串"abc12efg"、“abc34567efg”都能满足这个正则匹配。这个相信你能理解。
那么正则表达式模式中用小括号包起来的"\d2,5"这部分就叫“捕获组”,正则表达式引擎会将这部分匹配到的内容记下来,以便以后取用。java代码中,可以在调用Matcher对象的find方法得到true的返回值的时候(true说明正则表达式模式找到了符合匹配的内容),调用该Matcher对象的group(int groupNo)方法获得指定的组内容。还拿刚才那个例子来说,调用matcher.group(1)就会得到"12"、“34567”这样实际匹配的内容。这里要特别注意一下,组编号是从1开始计算的。0号组实际上就是整个正则表达式匹配到的内容。
再深入一点,上面讲到的所谓组是“捕获组”,正则引擎会记下来匹配内容,但是有时候我们不需要捕获,只是想要限制匹配,就会用到非捕获组。如果你真明白了捕获组,再看非捕获组以及前瞻后顾就明白了。
参考技术A 什么正则,网上查一下都有。你说的组是不是指范围 a-z?追答

看了下,就是一个方括号的内容,比如[a-z][0-9]\1那个\1就是[a-z], 知道为什么我为什么理解的这么快吗? 原因是我上英文网站查的,没有一堆乱七八糟的术语。

圆括号,打错

正则中的[中

正则表达式的() [] {}有不同的意思。

//() 是为了提取匹配的字符串

  • [] 是定义匹配的字符范围
  • {} 一般用来表示匹配的长度

括号

作用1: 把单独的项组合成子表达式,以便可以处理一个独立的单元那样用“|”、“*”、“+”、“?”等来对单元内的项进行处理。

例如:

1
2
3
4
// 可以匹配 字符串 java ,其后有没有 “script” 无所谓
/java(script)?/
// 可以匹配 "ef",也可 大专栏  正则中的[中以匹配 "ab""ef"一次或多次重复
/(ab|cd)+|ef/

作用2: 在完整的模式中定义子模式,当一个正字表达式成功地和目标字符串相匹配时,可以从目标串中抽出和圆括号中的子模式相匹配的部分。

假设,我们正在匹配一个或多个小写字母后面跟随了一位和多位数字,则可以使用 /[a-z]+d+/ ,假设我们只关心每个匹配尾部的数字,如果将模式的数字部分放在括号中/(/[a-z]+(d+)/)/,就可以从检索到的匹配中抽取数字了。

作用3: 允许在同一正则表达式的后部引用前面的子表达式。;

表达式中有几个()就有几个相应的匹配字符串。

(s*)表示连续空格的字符串。

以上是关于Java中 正则表达式中 组 是怎么用的?我看了n遍,没看懂的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式字符匹配

正则表达式怎么写?

怎么用正则表达式匹配中括号内的字符

java正则表达式-量词

java正则表达式-量词

Java 正则表达式之捕获组