大概是迄今为止遇到的Java相关知识里面最繁琐的部分了orz
具体内容还是去查Pattern的API文档吧
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author Leon
* @date 创建时间:2017年11月16日 下午2:31:56
* @version 1.0
* 类说明 :正则表达式
* 详情可以查看java.util.regex.Pattern的api文档
*/
public class Test
{
public static void p(Object o)
{
System.out.println(o);
}
public static void main(String[] args)
{
// // 正则表达式简单概念
// p("abc".matches("..."));
//
// // \d表示一位数字
// p("a656526a31".replaceAll("\\d", "-"));
//
// // Pattern类 编译a到z三个字母
// Pattern p = Pattern.compile("[a-z]{3}");// 提前编译,提升速度
// Matcher m = p.matcher("fgh");// 内部创建一个自动机,匹配结果保留在Matcher对象里面
// p(m.matches());
// // 以上三行相当于
// p("fgh".matches("[a-z]{3}"));
//
// // 初步认识 . * + ?
// p("a".matches("."));
// p("aa".matches("aa"));
// p("aaaa".matches("a*"));
// p("aaaa".matches("a+"));
// p("".matches("a*"));
// p("aaaa".matches("a?"));
// p("".matches("a*"));
// p("45446".matches("\\d{3,100}"));
// p("192.168.0.aaa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
// p("192".matches("[0-2][0-9][0-9]"));
//
// // 范围
// p("a".matches("[abc]"));
// p("a".matches("[^abc]"));// 取反
// p("A".matches("[a-zA-Z]"));// -表示范围
// p("A".matches("[a-z]|[A-Z]"));// 同上 |表示或者
// p("A".matches("[a-z[A-Z]]"));// 同上
// p("A".matches("[a-z&&[RFG]]"));// &&并且
//
// // 认识 \s \w \d \
// p(" \n\r\t".matches("\\s{4}"));
// p(" ".matches("\\S"));
// p("a_8".matches("\\w{3}"));
// p("abc123&^%".matches("[a-z]{1,3}\\d+[&^%#]+"));
// p("\\".matches("\\\\"));
//
// // POSIX Style
// p("a".matches("\\p{Lower}"));
//
// // boundary
// p("hello sir".matches("^h.*"));// ^在中括号外面代表一行的起始位置
// p("hello sir".matches(".*ir$"));// $:以某某结尾
// p("hello sir".matches("^h[a-z]{1,3}o\\b.*"));
// p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));
//
// // white lines:空白行
// p(" \n".matches("^[\\s&&[^\\n]]*\\n$"));
//
// // 练习
// p("aaa 8888c".matches(".*\\d{4}."));
// p("aaa 8888c".matches(".*\\b\\d{4}."));
// p("aaa8888c".matches(".*\\d{4}."));
// p("aaa8888c".matches(".*\\b\\d{4}."));
//
// //email
// p("asdfasdfsafsf@dsdfsdf.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));
// //matches find lookingAt
// Pattern p = Pattern.compile("\\d{3,5}");
// String s = "123-34345-234-00";
// Matcher m = p.matcher(s);
// p(m.matches());//会影响find(),需要加reset()
// m.reset();
// p(m.find());//find()找子串
// p(m.start() + "-" + m.end());
// p(m.find());
// p(m.start() + "-" + m.end());
// p(m.find());
// p(m.start() + "-" + m.end());
// p(m.find());
// //p(m.start() + "-" + m.end());
//
// p(m.lookingAt());//每次从头开始找
// p(m.lookingAt());
// p(m.lookingAt());
// p(m.lookingAt());
// // replacement
// Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);//大小写不敏感
// Matcher m = p.matcher("java Java JAVa JaVa IloveJAVA you hateJava afasdfasdf");
// StringBuffer buf = new StringBuffer();
// int i = 0;
// while (m.find())
// {
// i++;
// if (i % 2 == 0)
// {
// m.appendReplacement(buf, "java");
// }
// else
// {
// m.appendReplacement(buf, "JAVA");
// }
// }
// m.appendTail(buf);
// p(buf);
// // group 分组
// Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");
// String s = "123aa-34345bb-234cc-00";
// Matcher m = p.matcher(s);
// while (m.find())
// {
// p(m.group(1));//打印出来匹配到的子串 1:第一组 2:第二组
// }
// //quantifiers修饰词
// Pattern p = Pattern.compile("(.{3,10}+)[0-9]");//possessive quantifiers
// //Pattern p = Pattern.compile("(.{3,10})[0-9]");//greedy quantifiers
// //Pattern p = Pattern.compile("(.{3,10}?)[0-9]");//reluctant quantifiers
// String s = "aaaa5bbbb68";
// Matcher m = p.matcher(s);
// if (m.find())
// p(m.start() + "-" + m.end());
// else
// p("not match!");
// // non-capturing groups非捕获组
// Pattern p = Pattern.compile(".{3}(?=a)");
// //Pattern p = Pattern.compile("(?=a).{3}");
// String s = "444a66b";
// Matcher m = p.matcher(s);
// while (m.find())
// {
// p(m.group());
// }
// back refenrences向前引用
Pattern p = Pattern.compile("(\\d(\\d))\\2");
String s = "122";
Matcher m = p.matcher(s);
p(m.matches());
// // flags的简写
// // Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
// p("Java".matches("(?i)(java)"));
}
}