java正则表达式-案例代码

本文深入探讨了Java中正则表达式的应用,包括字符串匹配、分组、替换等关键操作,并通过具体代码实例展示了如何在实际场景中灵活运用正则表达式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载请注明出处:http://blog.youkuaiyun.com/droyon/article/details/8635735

jdk在线api:http://docs.oracle.com/javase/7/docs/api/index.html,选择java.utils.regex,可以查看Pattern类的介绍。


.:任意字符

[abc]:含有a,b,c的任意一个字符

[^abc]:除了a,b,c之外的任意字符

[a-zA-Z]:a到z,A到Z的任意字符

[abc[hij]]:a,b,c,h,i,j中的任意字符

[a-z&&hij]:匹配h,i,j中的任何一个交集


\s:空白符,空格,tab键,换行,换页,回车

\S:非空白符

\d:数字0到9

\D:非数字

\w:词字符[a-zA-Z0-9]

\W:非词字符


^:一行的开始

&:一行的结束

\b:词的边界

\B:非词的边界

\G:前一个匹配的结束

代码下载

PatternTest.java//字符串匹配正则表达式

public class PatternTest {
	public static void main(String args[]){
		for(String s:new String[]{"HelloWorld","[a-zA-Z]elloWorld","[a-zA-Z]+"
				,"[A-Z]?elloWorld","Hello.*"}){
			System.out.println("是否匹配:"+"HelloWorld".matches(s));
		}
	}
}
结果:

是否匹配:true
是否匹配:true
是否匹配:true
是否匹配:true
是否匹配:true

PatternMatcher.java//Pattern、Matcher类使用    abc+以及(abc)+的区别,+代表一个或多个 ?代表存在一个或一个没有

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class PatternMatcher {
	public static void main(String args[]){
		String s = "abcabcabcabchijabcccccc";
		String[] match = new String[]{"abc+","(abc)+"}; 
		for(String m:match){
			System.out.println("regex args is:"+m);
			Pattern pattern = Pattern.compile(m);
			Matcher matcher = pattern.matcher(s);
			while(matcher.find()){
				System.out.println("匹配到内容:"+matcher.group()+"在字符串的:"
						+matcher.start()+"-"+matcher.end());
			}
			System.out.println("---------------------------");
		}
	}
}
结果:

regex args is:abc+
匹配到内容:abc在字符串的:0-3
匹配到内容:abc在字符串的:3-6
匹配到内容:abc在字符串的:6-9
匹配到内容:abc在字符串的:9-12
匹配到内容:abcccccc在字符串的:15-23
---------------------------
regex args is:(abc)+
匹配到内容:abcabcabcabc在字符串的:0-12
匹配到内容:abc在字符串的:15-18
---------------------------

PatternGroup.java// 正则表达式 A(B(CD))E,Matcher.groupCount为正则表达式的级别。那么,Matcher.group(0) = ABCDE ,Matcher.group(1) = BCD,Matcher.group(2) = CD.Matcher.start代表开始匹配的位置,Matcher.end代表结束匹配的位置。

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class PatternGroup {
	public static void main(String args[]){
		String s = "abchabcabchabdabcabcabcabcabch";
		Pattern pattern = Pattern.compile("(abc((abc)+h))");
		Matcher matcher = pattern.matcher(s);
		System.out.println(matcher.groupCount());
		while(matcher.find()){
			for(int j=0;j<=matcher.groupCount();j++){
				System.out.println("group,级别:"+j+".结果为:"+matcher.group(j)+"--start-end:"+matcher.start()+"-"+matcher.end());
			}
			System.out.println("-----------------------");
		}
	}
}

结果:
3
group,级别:0.结果为:abcabch--start-end:4-11
group,级别:1.结果为:abcabch--start-end:4-11
group,级别:2.结果为:abch--start-end:4-11
group,级别:3.结果为:abc--start-end:4-11
-----------------------
group,级别:0.结果为:abcabcabcabcabch--start-end:14-30
group,级别:1.结果为:abcabcabcabcabch--start-end:14-30
group,级别:2.结果为:abcabcabcabch--start-end:14-30
group,级别:3.结果为:abc--start-end:14-30
-----------------------

PatternFlag.java//常用flag有:Pattern.CASE_INSENSITIVE,Pattern.MULTILINE,Pattern.DOTALL

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class PatternFlag {
	public static void main(String args[]){
		String s = "Java is good language!\n"
				+"JAVA is good one you choose.\n"
				+"java,we all use it.";
		Pattern pattern = Pattern.compile("^java",Pattern.CASE_INSENSITIVE|Pattern.MULTILINE);
		Matcher matcher = pattern.matcher(s);
		while(matcher.find()){
			System.out.println("匹配结果:"+matcher.group()+".start-end:"+matcher.start()+"-"+matcher.end());
		}
	}
}

结果:

匹配结果:Java.start-end:0-4
匹配结果:JAVA.start-end:23-27
匹配结果:java.start-end:52-56

PatternSplit.java//split的用法

import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class PatternSplit {
	public static void main(String args[]){
		String s = "Java is good language!\n"
				+"JAVA is good one you choose.\n"
				+"java,we all use it.";
		Pattern pattern = Pattern.compile("^java",Pattern.CASE_INSENSITIVE|Pattern.MULTILINE);
		Matcher matcher = pattern.matcher(s);
//		while(matcher.find()){
//			System.out.println("匹配结果:"+matcher.group()+".start-end:"+matcher.start()+"-"+matcher.end());
//		}
		System.out.println(Arrays.toString(pattern.split(s)));
		System.out.println("数组长度为:"+pattern.split(s).length);
		for(String arr:pattern.split(s)){
			System.out.println("数组内容为:"+arr);
		}
	}
}

测试结果:

[,  is good language!
,  is good one you choose.
, ,we all use it.]
数组长度为:4
数组内容为:
数组内容为: is good language!
数组内容为: is good one you choose.
数组内容为:,we all use it.

PatternReplace.java//replace的用法

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class PatternReplace {
	public static void main(String args[]){
		String s = "***java is a good language!";
		System.out.println("字符串:"+s);
		
		String s1 = s.replaceAll(" {1,}", "-");
		System.out.println("替换空格为-:"+s1);
		
		String s2 = s.replaceAll("(?m)^\\*{1,}", "");
		System.out.println("替换字符串开头的*:"+s2);
		
		Pattern pattern = Pattern.compile("[aeiou]");
		Matcher matcher = pattern.matcher(s);
		StringBuffer sb = new StringBuffer();
		while(matcher.find()){
			matcher.appendReplacement(sb, matcher.group().toUpperCase());
		}
		System.out.println("替换字符串为:"+sb.toString());
	}
}

结果为:

字符串:***java is a good language!
替换空格为-:***java-is-a-good-language!
替换字符串开头的*:java is a good language!
替换字符串为:***jAvA Is A gOOd lAngUAgE


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hailushijie

您的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值