public class Test { public static void main(String[] args) throws Exception { //p("abc".matches("...")); //p("a8729a".replaceAll("//d", "-")); /*Pattern p = Pattern.compile("[a-z]{3}"); Matcher m = p.matcher("fgh"); p(m.matches()); p("fgha".matches("[a-z]{3}"));*/ /* . 一个任意字符 * * 0个或多个 * + 1个或多个 * ? 0个或1个 * /d 1个数字 * /D 1个非数字 * */ /*p("a".matches("."));//true p("aa".matches("aa"));//true p("aaaa".matches("a*"));//true p("aaaa".matches("a+"));//true p("".matches("a*"));//true p("aaaa".matches("a?"));//false p("".matches("a?"));//true p("a".matches("a?"));//true p("214523145234532".matches("//d{3,100}"));//true p("192.168.0.aaa".matches("//d{1,3}//.//d{1,3}//.//d{1,3}//.//d{1,3}"));//false p("192".matches("[0-2][0-9][0-9]"));//true */ /* [abc] 匹配a,b,c中的任意一个 * [^abc] 任意一个字符除了a,b,c * [a-c] a至c中的任一个字符 * * */ /* p("a".matches("[abc]"));//true p("a".matches("[^abc]"));//false p("A".matches("[a-zA-Z]"));//true p("A".matches("[a-z]|[A-Z]"));//true p("A".matches("[a-z[A-Z]]"));//true p("R".matches("[A-Z&&[RFG]]"));//true */ /* /s 一个空白字符 * /S 一个非空白字符 * /w 构成单词的一个字符,[a-zA-Z0-9_], 即字母数字和下划线 * * */ /*p(" /n/r/t".matches("//s{4}"));//4个空白字符 true p(" ".matches("//S"));//非空白字符 false p("a_8".matches("//w{3}"));//3个构成单词的字符 true p("abc888&^%".matches("[a-z]{1,3}//d+[&^#%]+"));//true p("//".matches(""));//1个反斜线匹配1个反斜线 true */ /* ^ 以什么开头,如果^位于中括号内表示取反 * $ 以什么结尾 * /b 一个单词的边界 * */ /* p("hello sir".matches("^h.*"));//以h开头,后边是一个字符再加0个或多个字符 true p("hello sir".matches(".*ir$"));//以ir结尾,前边是一个字符再加0个或多个字符 true p("hello sir".matches("^h[a-z]{1,3}o//b.*"));//以h开头,后边是1到3个字符,然后是单词边界,再跟一个字符再加0个或多个字符 true p("hellosir".matches("^h[a-z]{1,3}o//b.*"));//同上 false */ //开头的是一个空白符并且非换行符,出现0次或多次空白非换行,以换行结尾.要注意这里的两个^号,第1个是指以什么开头 //第二个在尖括号内表示非 /* ^[//s&&[^//n]]* 表示开头的是一个空白符且非换行符,出现0次或多次空白非换行符,注意:也可以不出现 * //n$以换行符结尾。 * 上边两句合起来就是匹配一个空白行,这个空白行可以是以空白字符开头,中间全是空白字符,并且以回车结尾。也可以直接以回车开头 * */ /*p(" /n".matches("^[//s&&[^//n]]*//n$"));//true p("/n".matches("^[//s&&[^//n]]+//n$"));//false 与上边已经的区别是开头的必须是一个空白字符,不能以回车开头 */ /* p("aaa 8888c".matches(".*//d{4}."));//true p("aaa 8888c".matches(".*//b//d{4}."));//true p("aaa8888c".matches(".*//d{4}."));//true p("aaa8888c".matches(".*//b//d{4}."));//false */ //匹配email地址,前边一部分是构成单词的字符或者.或者- //p("feifei5678@21cn.com".matches("[//w[.-]]+@[//w[.-]]+//.[//w]+")); /* matches匹配整个字符串,find找字串,要注意matches和find混合使用的影响性,故要用reset。lookingAt是看头是否符合 * start()是匹配的开始位置,end()是匹配的结束位置的后一位 * */ /* Pattern p = Pattern.compile("//d{3,5}"); String s = "123-34345-234-00"; Matcher m = p.matcher(s); p(m.matches());//matches是匹配整个字符串 false,这个时候正则表达式引擎已经读进去了4个字符,所以下边要重新reset m.reset();//此时把正则表达式引擎重新恢复到表达式开始位置 p(m.find());//分析123 true p(m.start()+"-"+m.end());//0-3 p(m.find());//分析34345 true p(m.start()+"-"+m.end());//4-9 p(m.find());//分析234 true p(m.start()+"-"+m.end());//10-13 p(m.find());//分析00 false p(m.lookingAt());//看正则表达式的头是否符合 */ /* group()返回匹配到的字符串 replaceAll()替换所有的 * appendReplacement(buf, string)替换为string并添加到buf * */ /* Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);//不区分大小写 Matcher m = p.matcher("asdfasdf java Java JAVa JaVa IloveJAVA you hateJava asdfasdfasd"); StringBuffer buf = new StringBuffer(); int i=0; while(m.find()) { i++; p(m.group()); if(i%2==0) {//把找到的第偶数个替换为小写 m.appendReplacement(buf, "java"); } else {//把找到的第奇数个替换为大写 m.appendReplacement(buf, "JAVA"); } } m.appendTail(buf);//把最后剩下的未匹配的添加到buf p(buf); */ /* 正则表达式的分组,用小括号表示.下例的正则表达式分了2组,第1组是3到5个数字,第2组是2个小写字母 * group(int)可以传个参数,第几组 * */ /*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());//打印所有匹配的 p(m.group(1));//打印第一组,即数字 p(m.group(2));//打印第二组,字母 } */ /*抓取一个文件中的所有email地址 * */ /* BufferedReader br = new BufferedReader( new FileReader("C://Documents and Settings//Administrator//桌面//111111.htm")); String line = ""; StringBuffer sb = new StringBuffer(); while((line=br.readLine()) != null) { Pattern p = Pattern.compile("[//w[.-]]+@[//w[.-]]+//.[//w]+"); Matcher m = p.matcher(line); while(m.find()) { sb.append(m.group()).append(";"); } } p(sb.toString()); */ /* 检查一个文件有多少的空白行,正常行和注释行 * */ // long normalLines = 0;//正常行 // long commentLines = 0;//注释行 // long whiteLines = 0;//空白行 // File f = new File("D://te"); // File[] codeFiles = f.listFiles(); // for(File singleFile : codeFiles) // { // if(singleFile.getName().matches(".*//.java$")) // { // boolean comment = false; // BufferedReader br = new BufferedReader(new FileReader(singleFile)); // String line=""; // while((line=br.readLine())!=null) // { // line = line.trim(); // p(line); // if(line.matches("")) // { // whiteLines++; // } // else if(line.startsWith("/*")) // { // commentLines++; // if( !line.endsWith("*/")) // comment = true; // } // else if(comment) // { // commentLines++; // if(line.endsWith("*/")) // comment = false; // } // else if(line.startsWith("//")){ // commentLines++; // } // else // { // normalLines++; // } // } // } // } // p("正常行:"+normalLines); // p("注释行:"+commentLines); // p("空白行:"+whiteLines); } public static void p(Object o) { System.out.println(o); } }