Pattern:要符合的那种模式。
Matcher:用这种模式匹配字符串得到的结果。
上例子:
package com.zhj.www; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestRegular { public static void main(String[] args) { //简单认识正则表达式的概念 /* p("abc".matches("..."));//一个点就是一个字母 p("a8729a".replaceAll("\\d", "-"));//'\d'是一位数字,用两个'\'表示一个'\' Pattern pattern = Pattern.compile("[a-z]{3}"); //compile把这个正则表达式编译一下;放到这个模式里。 Matcher matcher = pattern.matcher("fgh"); p(matcher.matches()); p("fgh".matches("[a-z]{3}"));*/ //初步认识 . * + ? 是特殊字符 /*p("a".matches(".")); p("aa".matches("aa")); p("aaaa".matches("a*")); p("aaaa".matches("a+")); p("aaaa".matches("a?")); p("".matches("a?")); p("a".matches("a?")); p("2123434134231".matches("\\d{3,100}")); \\d表示数字 。{3,100}表示至少出现3次,不超过100次 p("192.168.1.aaa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}")); p("192".matches("[0-2][0-5][0-5]"));//[]表示范围0-5*/ //范围 p("a".matches("[abc]"));//一个中括号表示一个字符,[abc]提取abc中的任意一个。就是说a是否属于[abc] p("a".matches("[^abc]"));// ^abc表示除了abc。不匹配 p("A".matches("[a-zA-Z]"));//属于a-z或者A-Z p("A".matches("[a-z]|[A-Z]"));//同上 p("A".matches("[a-z[A-Z]]"));//同上 p("R".matches("[A-Z&&[RFC]]"));//A-Z并且是[RFC]三者任意一个的。 } //输出 public static void p(Object o) { System.out.println(o); } }栗子:
package com.zhj.www; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestRegular { public static void main(String[] args) { //认识 \s \w \d /*p(" \n\r\t".matches("\\s{4}")); p(" ".matches("\\S"));// \\S表示空白字符。false p("a_8".matches("\\w{3}")); p("abc888&^%".matches("[a-z]{1,3}\\d+[&^#%]+"));//a-z中的字符出现1至3次,数字出现1次或多次,[&^#%]中的任意一个字符出现1次或多次。 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.*"));// \b表示单词边界:空格,换行... //p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));//没有空格 //white lines //p("\n".matches("^[\\s && [^\\n]]*\\n$")); //练习1 //p("aaa 8888c".matches(".*\\d{4}.")); //p("aaa 8888c".matches(".*\\b\\d{4}.")); //p("aaa8888c".matches(".*\\d{4}.")); //p("aaa8888c".matches(".*\\b\\d{4}.")); //练习2 匹配email地址 //p("1257699625@qq.com".matches("\\d{1,11}@[a-z|A-Z]{2}\\.[a-z|A-Z]{3}")); p("asdfaasdf@qq.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+")); //matches find lookingAt Pattern pattern =Pattern.compile("\\d{3,5}"); String string ="123-34345-234-00"; Matcher matcher = pattern.matcher(string); p(matcher.matches());//false;搜索引擎在34345的3 //matcher.reset();//原来吃掉的字符吐掉 p(matcher.find());//找符合的一个字串:34345 p(matcher.find());//把符合的第一个字串去掉 234 p(matcher.find());//false p(matcher.find());//false /*matcher与find影响*/ /*每次都从开始的位置开始找*/ p(matcher.lookingAt());//true p(matcher.lookingAt());//true p(matcher.lookingAt());//true p(matcher.lookingAt());//true /*matches匹配整个字符串,find找自串 * matches与find 一起使用会互相影响,使用过matches之后,可以使用reset,回到开始的位置,再使用find*/ } //输出 public static void p(Object o) { System.out.println(o); } }