在源码中,返回语句 return getSubSequence(groups[group * 2], groups[group * 2 + 1]).toString();
中,[group * 2] 和 [group * 2 + 1]计算的就是groups数组的位置
如果我们想要取出第一组括号匹配的子字符串,即groups下标为[2]和[3],只需要将传入的参数改为1即可
groups[1 * 2]=groups[2] , groups[1 * 2 + 1]=groups[3]取出第二组括号匹配的字符串同理,将传入的参数改为2即可
groups[2 * 2]=groups[4] , groups[2 * 2 + 1]=groups[5]

文章插图
小结:
- 如果正则表达式有括号(),即分组
- 取出匹配的字符串规则如下:
matcher.group(0)
表示匹配到的子字符串matcher.group(1)
表示匹配到的子字符串的第1组字串matcher.group(2)
表示匹配到的子字符串的第2组字串- 以此类推,注意分组的数不能越界
- 基本介绍
如果想要灵活地运用正则表达式,必须了解其中各种元字符(Metacharacter)的功能,元字符从功能上大致分为:
- 限定符
- 选择匹配符
- 分组组合和反向引用符
- 特殊字符
- 字符匹配符
- 定位符
\\
符号的说明:在我们使用正则表达式去检索某些特殊字符时,需要用到转义符号\\
,否则检索不到结果,甚至会报错 。注意:在Java的正则表达式中,两个
\\
表示其他语言中的一个\
需要用到转义符号的字符有如下:
. * + () $ / \ ? [] ^ {}
例子:
package li.regexp;import java.util.regex.Matcher;import java.util.regex.Pattern;//演示转义字符的使用public class RegExp02 {public static void main(String[] args) {String content = "abc$(a.bc(123(";//匹配 ( ==> \\(//匹配 ( ==> \\.//String regStr = "\\(";String regStr = "\\.";Pattern pattern = Pattern.compile(regStr);Matcher matcher = pattern.matcher(content);while (matcher.find()) {System.out.println("找到:" + matcher.group(0));}}}

文章插图

文章插图
5.4.2元字符-字符匹配符

文章插图

文章插图
- 应用实例
[a-z]
说明:
[a-z]
表示可以匹配 a-z 之间任意的一个字符
[A-Z]
表示可以匹配 A-Z 之间任意的一个字符
[0-9]
表示可以匹配 0-9 之间任意的一个字符
比如[a-z]、[A-Z]去匹配“a11c8”会得到什么结果?结果是:a、c
- java正则表达式默认是区分大小写的,如何实现不区分大小写?
(?i)abc
表示abc都不区分大小写a(?i)bc
表示bc不区分大小写a((?i)b)c
表示只有b不区分大小写Pattern pattern = Pattern.compile(regStr,Pattern.CASE_INSENSITIVE);
[^a-z]
说明:
[^a-z]
表示可以匹配不是a-z中的任意一个字符
[^A-Z]
表示可以匹配不是A-Z中的任意一个字符
[^0-9]
表示可以匹配不是0-1中的任意一个字符
如果用 [^a-z]去匹配“a11c8”会得到什么结果?结果:1、1、8
用 [^a-z]{2}又会得到什么结果?结果是:11经验总结扩展阅读
- Java函数式编程:一、函数式接口,lambda表达式和方法引用
- .net lambda表达式合并
- SpringBoot框架SpEL表达式注入漏洞复现与原理分析
- C++ 使用栈求解中缀、后缀表达式的值
- 【Java8新特性】- Lambda表达式
- 二 Python常用的正则表达式
- spring cron表达式源码分析
- excel中如何使用countif的表达式进行统计?你知道吗?
- 名不正则言不顺言不顺则事不成是什么意思 名不正则言不顺言不顺则事不成的意思
- 氯酸钾制取氧气的文字表达式