Java中的正则表达式
1.Java中对于正则表达式的引用主要是包java.util.regex下的Pattern类和Matcher类,
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher.
Pattern类是正则表达式的编译形式,即把一个正则表达式作为参数赋给Pattern对象,对该正则表达式进行处理;
Matcher类通过解释Pattern对字符串进行匹配;
它们的关键用法如下:
Pattern的compile静态方法将正则表达式编译成一个Pattern对象;
Pattern的matcher实例方法获取一个匹配器(Matcher对象),参数为待匹配字符串;
Pattern的split实例方法将字符串按照正则表达式分解成多个字符子串;
Matcher的matches方法精确匹配,将整个字符串与Pattern相匹配;
Matcher的find方法扫描字符串,以匹配与Pattern匹配的下个子串;
Matcher的replaceAll方法将字符串中与pattern匹配的子串用新的子串替换掉;
2.其实String类中也有对正则表达式使用的方法;
matches(String pattern)方法判断字符串是否匹配正则表达式;
split(String pattern)方法将字符串按照正则表达式分解成多个字符子串;
replaceAll和replaceFirst方法可以用正则表达式指出待替换的子串;
Java中对正则表达式的处理比较简单,关键点在于如何构造一个正则表达式模式;
关于正则表达式的构造可学习: http://www.jb51.net/tools/zhengze.html
3.以下是java中对正则表达式的运用:
package test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class regextest {
Pattern pattern;
Matcher matcher;
String rult="^([0-9]{3}-?[0-9]{8})|([0-9]{4}-?[0-9]{7})$";
//使用String类中利用正则表达式匹配的方法;
public boolean stringregex(String str)
{
if(str!=null)
{
return str.matches(rult);
}
return false;
}
//使用Pattern和Matcher匹配的方法;
public boolean patternregex(String str)
{
pattern=Pattern.compile(rult);
matcher=pattern.matcher(str);
return matcher.matches();
}
//测试正则表达式的匹配
public void testmatch()
{
System.out.println("测试用正则表达式的匹配:");
String phoneNO="0154-85717921";
System.out.println(phoneNO+"是一个格式合法的电话号码?"+stringregex(phoneNO));
System.out.println(phoneNO+"是一个格式合法的电话号码?"+patternregex(phoneNO));
phoneNO="0154-5717921";
System.out.println(phoneNO+"是一个格式合法的电话号码?"+stringregex(phoneNO));
System.out.println(phoneNO+"是一个格式合法的电话号码?"+patternregex(phoneNO));
phoneNO="001-85717921";
System.out.println(phoneNO+"是一个格式合法的电话号码?"+stringregex(phoneNO));
System.out.println(phoneNO+"是一个格式合法的电话号码?"+patternregex(phoneNO));
}
//使用正则表达式分割字符串
public String[] split(String str,String regex,int count)
{
pattern=Pattern.compile(regex);
return pattern.split(str);
}
//测试用正则表达式分割字符串;
public void testsplit()
{
System.out.println("测试用正则表达式分割字符串:");
String str="today is a sunny day,but...";
//以空格和逗号作为分割符分割;
String regex="[, ]";
String[] array=split(str,regex, 10);
for(int i=0;i<array.length;i++)
{
System.out.println(array[i]);
}
System.out.println(array.length);
}
//利用正则表达式替换字符串
public void replace(String str,String regex,String newstr)
{
pattern=Pattern.compile(regex);
matcher=pattern.matcher(str);
String s=matcher.replaceAll(newstr);
System.out.println("原字符串:"+str);
System.out.println("替换后的字符串:"+s);
}
//测试用正则表达式替换字符串;
public void testreplace()
{
System.out.println("测试用正则表达式替换字符串:");
String str="3892a64b9";
String regex="[0-9]";
replace(str,regex,"*");
}
public static void main(String[] argv)
{
regextest regex=new regextest();
regex.testmatch();
regex.testsplit();
regex.testreplace();
}
}