优秀的编程知识分享平台

网站首页 > 技术文章 正文

java正则^的理解与误区(java正则?)

nanyue 2024-08-15 08:03:42 技术文章 5 ℃

在java的正则中,很多时候以为^表示的含义就是字符的开始,其实^放在[]时,表示的并非开始的意思,而是排除和非的意思。

例如有个需求,需要在一个字符串中找出被数字包围的子串

直接上代码

public static void main(String[] args) {
		String reg = "\\d+([^\\d]+)\\d+";

		String str1 = "AA123baidu678EEdd";
		System.out.println("result1: "+str1.replaceAll(reg, "$0"));//替换为reg表示的整个内容
		System.out.println("result2: "+str1.replaceAll(reg, "$1"));//替换为reg的第一个()内表示的内容

		Pattern p = Pattern.compile(reg);
		Matcher m = p.matcher(str1);
		while (m.find()) {

			//System.out.println("ip:" + m.group());
			System.out.println("group--> " + m.group(1));//获取reg的第一个()内表示的内容
		}

	}

运行结果:

result1: AA123baidu678EEdd
result2: AAbaiduEEdd
group--> baidu


解析

下面解析 String reg = "\\d+([^\\d]+)\\d+";

左边的\\d+ : 表示数字开头,出现一次或多次

([^\\d]+) :

()表示一个组

[^\\d] 这里的^表示除数字之外的字符

[^\\d]+ 后面多一个+号表示出现一次以上

整个括号表示非数字的字符

\\d+

最后的\\d+ :也是表示数字,这里就是结尾


所以整个 \\d+([^\\d]+)\\d+ 就是表示匹配一个两头是数字、中间非数字的字符串

最近发表
标签列表