正则表达式
2013-08-14 23:50
148 查看
在java中matches中用到很多。
范例:
范例:
package com.haizhu; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegExp { public static void main(String[] args) { p("abc - ...","abc".matches("...")); // 字符串匹配,有三个字符,用三个点匹配,结果是“true” p("a8729a - replace ","a8729a".replaceAll("\\d", "-")); // 使用正则表达式,将所有的数字替换为“-” //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 认识 Pattern &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Pattern p = Pattern.compile("[a-z]{3}"); // 定义一个匹配模板,预处理,效率高 Matcher m = p.matcher("fgh"); p("Pattern.compile ",m.matches()); // 上面这三句可以合成下面一句,但是上面的好处还是有很多的:效率,功能 ,等等 p("改写Pattern.compile ","fhg".matches("[a-z]{3}")); //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 认识 “ . 、 * 、+ ” &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& p("a - .","a".matches(".")); p("a - a","a".matches("a")); // 注意,不一定全是正则匹配,字符跟字符也可以 p("aaa - a?","aaa".matches("a?")); // 0 或 1 个 p("aaa - a*","aaa".matches("a*")); // 0 或 N 个 p("aaa - a+","aaa".matches("a+")); // 1 或 N 个 p(" - a?","".matches("a?")); p(" - a*","".matches("a*")); p(" - a+","".matches("a+")); p("145234523452345 - \\d{3,}","145234523452345".matches("\\d{3,}")); // 出现一个数字,至少 3 次,没有上限 p("145234523452345 - \\d{3,100}","145234523452345".matches("\\d{3,100}")); // 出现一个数字,至少 3 次,不多于 100 次 // 使用的是 “.” 连接 p("192.168.0.aaa - \\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}","192.168.0.aaa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}")); // 注意字母[a-z]前面没有 “\\” p("192.168.0.aaa - \\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.[a-z]{3}","192.168.0.aaa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.[a-z]{3}")); // 更加精确的数组匹配,确定数字的范围 p("192 - ","192".matches("[0-2][0-9][0-9]")); // 中括号只匹配一个字符,要想匹配多个,使用{} //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 范围 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& p("a - [abc]","a".matches("[abc]")); p("a - [^abc]","a".matches("[^abc]")); // 使用 “^” 表示不再这个范围内 p("字母和数字","a".matches("[0-9a-zA-Z]")); // 数字,大写,小写都可以 p("a - [a-zA-Z]","a".matches("[a-zA-Z]")); // 大写,小写都可以(直接写一起,不用分割) p("a - [a-z]|[A-Z]","a".matches("[a-z]|[A-Z]")); // 同上 p("a - [a-z[A-Z]]","a".matches("[a-z[A-Z]]")); // 同上 p("A - [A-Z&&[ABC]]","A".matches("[A-Z&&[ABC]]")); // A-Z 并且 属于ABC ,也就是交集的意思 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 认识 \s \w \d &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& p("",""); //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 认识边界 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& p("hello sir - ^h.*","hello sir".matches("^h.*")); p("hello sir - .*ir$","hello sir".matches(".*ir$")); p("hello sir - ^h.*ir$","hello sir".matches("^h.*ir$")); //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 认识分组 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& String s2 = "123aa-2345-bb-668cc-00"; Pattern p2 = Pattern.compile("\\d{3,5}[a-z]{2}"); Matcher m2 = p2.matcher(s2); while(m2.find()){ p("没有添加括号时",m2.group()); } String s3 = "123aa-2345-bb-668cc-00"; Pattern p3 = Pattern.compile("(\\d{3,5})([a-z]{2})"); Matcher m3 = p3.matcher(s3); while(m3.find()){ p("这个就是find的结果",m3.group(0)); p("只打印数字部分",m3.group(1)); p("只打印字母部分",m3.group(2)); } } public static void p(String s,Object o){ System.out.println(s+":"+o); } }