Java正则表达式--分组

版权声明:本文为CSDN博主「gohodo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41084324/article/details/83989223


在java正则表达式中,( )是分组的意思,依旧是所谓的捕获组。每一个( )代表着一个group,该组是通过从左至右计算其括号来编号。
比如:

在表达式((A)(B(C))),有四个这样的组:

  • ((A)(B(C)))
  • (A)
  • (B(C))
  • (C)

分组就是按照括号从左至右计算得来的,可以通过调用 matcher 对象的 groupCount 方法来查看表达式有多少个分组。groupCount 方法返回一个 int 值,表示matcher对象当前有多个捕获组。
还有一个特殊的组(group(0)),它总是代表整个表达式。该组不包括在 groupCount 的返回值中。
分组作用:

  1. 将某些规律看成是一组,然后进行组级别的重复,可以得到意想不到的效果。
  2. 分组之后,可以通过后向引用简化表达式(\1 或者$1)。

分组举列

  • 作用1
    对于IP地址的匹配,简单的可以写为如下形式
    String pattern = "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})";
    从这个 我们可以看出,这里有五个group,group(0)、group(1)、group(2)、group(3)、group(4),并且这几个分组的正则表达式都是一样的。我们可以对上述正则表达式进行简化。结果如下:
    String pattern = "(\\d{1,3})(\\.(\\d{1,3})){3}";
    这个表达式的意思就是把IP地址xx.xx.xx.xx后面的带颜色的.xx重复三次。

  • 作用2
    匹配hello标签,简单的正则可以这样写:
    .*
    可以看出,上边表达式中有两个title,完全一样,其实可以通过分组简写。表达式如下:
    <(title)>.* eclipse中是<(title)>.*

你可能感兴趣的:(Java正则表达式--分组)