总的来说博客中讲的太少了,还是要看编程思想,里面有关于这部分非常全面的讲解。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Ans {
public static void main(String[] args) {
test1();
test3();
test5();
}
static void test1() {
//注意\d匹配数字,\D匹配非数字
//{n}为匹配n个,{n,m}匹配n到m个,{n,}匹配至少n个
//使用String.matches反复匹配一个表达式会不断创建相同的Pattern,导致一些性能上的浪费
String re0 = "\\d",re1 = "\\D",re2 = "\\d{3}",re3 = "\\d{2,4}",re4 = "\\d{2,}";
System.out.println("1".matches(re1));
System.out.println("111".matches(re2));
System.out.println("111".matches(re3));
System.out.println("1111111".matches(re4));
}
static void test2() {
// ^为开头,$为结尾
}
static void test3() {
//括号可以在匹配时起到分组的作用
Pattern p = Pattern.compile("(\\d{3})(\\d{2,6})");
Matcher m = p.matcher("112456");
if (m.matches()) {
System.out.println(m.group(1));
System.out.println(m.group(2));
}
}
static void test4() {
//java 默认为贪婪匹配,加上?变为勉强型,加上+变为占有型(在编程思想中讲到)
}
static void test5() {
//再替换时可以使用$来反向匹配
Pattern p = Pattern.compile("([a-z]{2,5})(\\d{1,4})");
Matcher m = p.matcher("adada132 dai3 aod9qeq aoaoddidi44");
System.out.println(m.replaceAll("<a>$1<a><b>$2<b>"));
}
}