正则表达式,一种能够刻画某种词法规则的字符串。
正则表达式常用符号:
注:
1、Java编译器仅支持转义符,不支持元字符,因此“\D”要写成“ \\D”的形式。
2、元字符只能匹配一个字符。匹配长度未知的单词,必须要使用量词 * 、+、{m}、{m,n}等 。
常见支持正则表达式的场合:
1、java.util.regex包中的类,如:Pattern和Matcher
import java.util.regex.*;
public class Regular {
public static void main(String [] args) {
Pattern p = Pattern.compile("aba");
Matcher m = p.matcher("abababa");
boolean b = false;
while(b = m.find())
System.out.print(m.start()+"**");
}
}
import java.util.regex.*;
public class Regular {
public static void main(String [] args) {
Pattern p = Pattern.compile("a.b");
Matcher m = p.matcher("aa8b+aob+a*b33+a/b123");
boolean b = false;
while(b = m.find())
System.out.print(m.group()+" ");
}
}
2、String类有以下四个支持正则表达式的函数,注:只有名为reg的参数才支持正则式。
boolean matches(String reg):判断this是否与reg匹配
String replaceAll(String reg, String p):用p替换this中所有reg
String replaceFirst(String reg, String p):用p替换this中首个reg
String [] split(String reg):用reg为分隔符,提取this中的子串
例
给出一段文字,提取其中电话号码
public class PhoneNumber {
public static void main(String [] args) {
String s = "张三:0123-1234567、李四:010 12345678、王五:0123 1234567";
System.out.println(s);
System.out.print("\n以、作为分隔符来提取字符串\n");
String [] sa = s.split("、");
for(String ss:sa) System.out.print(" # "+ss);
System.out.print("\n\n以正则式[:、]作为分隔符来提取字符串\n");
sa = s.split("[:、]");
for(String ss:sa) System.out.print(" # "+ss);
System.out.print("\n\n以正则式[\\D*&&[^- ]]提取出所有的电话号码\n");
sa = s.split("[\\D*&&[^- ]]");
for(String ss:sa) System.out.print(" # "+ss);
System.out.print("\n\n将0123开头的电话号改为0123-xxxxxxx");
String s1 = s.replaceAll("0123[- ]\\d{7}","0123-xxxxxxx");
System.out.print("\ns="+s);
System.out.print("\ns1="+s1+"\n\n");
String s2 = "a99+0X55f-55/0xAF+33";
String [] sd = s2.split("0[Xx]([0-9a-fA-F])+");
for(String ss:sd) System.out.print(" # "+ss);
}
}