1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > java正则表达式基础 关于特殊字符 捕获组和非捕获匹配

java正则表达式基础 关于特殊字符 捕获组和非捕获匹配

时间:2024-08-06 00:14:54

相关推荐

java正则表达式基础  关于特殊字符 捕获组和非捕获匹配

JAVA正则表达式

我个人认为正则表达式是很好用很强大的,在编写程序中很多地方都用的到,这里有一些我学习的基础理解和大家分享,欢迎一起讨论。

正则表达式是一种用来表达语法规则的字符串,是一种字符串匹配的模式,用于解析字符串。由普通字符和元字符构成。普通字符指的是字母、中文、数字等,元字符指的是特殊字符(用一个或一组代替一个或多个字符的字符)。

常用的特殊字符:

java中的正则表达式特殊地方:

在其他语言的正则表达式中,一个\就具有特殊意义,两个\表示一个普通的\。而在java的正则中,两个\表示后面的字符有特殊意义,而表示一个普通的\就需要四个\。

捕获组:

捕获组是通过从左至右计算其开括号来编号,分组解析。例如在表达式((A)(B(C)))可以根据括号解析为4个组

1.((A)( B( C ) ) )

2.(A)

3.(B ( C ))

4.( C )

每一组都指一个子表达式

非捕获匹配:

(?:pattern):

表示未捕获分组,字符串依然需要匹配该表达式,但是该表达式的值不会存储,只是可以供其他表达式使用,例如

(industr(y|ies)) 匹配 industry ,我们会得到两组,一个industry 和一个y。

因为我们要一个单的y或者ies没有意义,所以需要(?:)

(industr(?:y|ies)) 匹配 industry ,我们只会得到industry ,而这是我们想要的。

我认为这个语法很多情况下都会遇到,所以需要掌握。

(?=pattern) 正向肯定预查

以 xxx(?=pattern)为例,就是捕获以pattern结尾的内容xxx

(?!pattern) 正向否定预查:

以 xxx(?!pattern)为例,就是捕获不以pattern结尾的内容xxx

(?<=pattern) 反向肯定预查:

以(?<=pattern)xxx为例,就是捕获以pattern开头的内容xxx。

(?<!pattern) 反向否定预查:

以(?<!pattern)xxx为例,就是捕获不以pattern开头的内容xxx。

java实例代码:

//取字符串中的年月//title-标题 patten-正则表达式 String title="5月的太原售电量";String patten="(\\d{4}年)(\\d{1,2}月)";//用正则创建Pattern对象Pattern compile = pile(patten);//用Pattern对象匹配写好的正则返回Matcher对象Matcher matcher = compile.matcher(title);//循环取Matcher对象匹配到的组while (matcher.find()){//groups 匹配到多少组int groups = matcher.groupCount();System.out.println(groups);//循环输出每组表达式匹配的字符串for (int i = 1; i <=groups ; i++) {String group = matcher.group(i);System.out.println(group);}}

结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。