在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段。
正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
自从jdk1.4推出java.util.regex包,就为我们提供了很好的JAVA正则表达式应用平台。因为正则表达式是一个很庞杂的体系,所以我仅例举些入门的概念,更多的请参阅相关书籍及自行摸索。
示例:获取一定规则字符串
1.定义一个获取规则封装成对象
Pattern p=Pattern.compile("[a-z]{3}");
2.用正则对象的matcher()方法跟字符串关联,并返回一个Matcher对象
Matcher m=p.matcher("aaaa bbbb, ccc");
3通过Matcher对象find()遍历字符串查找符合规则的内容,并通过group()获取匹配的子序列。
while(m.find()){
System.out.println("开始位置:"+m.start()+"=="+m.group()+"==结束位置:"+m.end());
}
m.start() //返回获取内容开始位置
m.end() //返回获取内容结束位置
通过string对象的一些方法可对字符串进行匹配,切割,替换操作,不用封装Pattern这么麻烦:
匹配:matches()
例子:
String s="123456"; //匹配的字符串
String ss="[\\d]{6}"; //匹配0-9数字的6位字符串
booleam b=s.matches(ss); //返回的b是true
切割:split()
例子:
String s="123.456.789"; //切割的字符串
String ss="\\."; //正则
String[] sss=s.split(ss); //对字符串s按正则ss进行切割,返回sss字符数组
for(String str:sss){ //遍历sss字符数组并打印
System.out.println(str);
}
替换:replace()和replaceAll()
例子:
String s="326_45_749"; //替换的字符串
String ss="_"; //需要替换的字符
String sss=s.replaceAll(ss,"0"); //对字符串s的"_"替换成"0",返回sss字符串
System.out.println(sss);<span style="font-family: Arial;">//打印替换后的字符</span>