【JAVA基础】正则表达式
正则表达式就是我们程序员为了在海量数据中搜索到符合我们规定的格式的数据所采用的一种规范,官方一点就是说正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。
下面我们介绍一下正则表达式的规则,而且会给出一个详尽的实例来让你完全理解正则表达式的应用。 1.正则表达式的构造摘要 正则表达式的构造摘要
2.正则表达式应用大实例 正则表达式:RegularExpressions(字符串处理利器) package cn.edu.RegularExpressions; import java.util.regex.Matcher; import java.util.regex.Pattern; class Test { public static void main(String[] args) { //简单理解正则表达式 System.out.println("abc".matches("...")); //其中“d”代表一个数字(0-9) System.out.println("a324234a".replaceAll("d","-")); Pattern p=Pattern.compile("[a-z]{3}"); Matcher m=p.matcher("fgh"); System.out.println(m.matches()); System.out.println("fgha".matches("[a-z]{3}")); /*结果 * true a------a true false * */ //初步认识. * + p("1:"+"a".matches("."));// p("2:"+"aa".matches("aa"));//true,正则表达式可以写正常的字符 p("3:"+"aaaa".matches("a*"));//“*”代表的是0个或者多个 p("4:"+"aaaa".matches("a+"));//“+”代表的是1个或者多个 p("5:"+"".matches("a*")); p("6:"+"aaaa".matches("a?"));//“?”代表的是0个或1个 p("7:"+"".matches("a?")); p("8:"+"a".matches("a?")); p("9:"+"2342342432423234".matches("d{3,100}"));//“{”与“}”代表出现的次数(几次,至少几次,最多几次最少几次) //最简单的检测IP地址的方式: p("10:"+"192.168.0.aaa".matches("d{1,3}.d{1,3}")); p("11:"+"192".matches("[0-2][0-9][0-9]"));//“[]”代表一个范围 /*结果: 1:true 2:true 3:true 4:true 5:true 6:false 7:true 8:true 9:true 10:false 11:true*/ 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("R".matches("[A-Z&&[RFG]]")); /*true false true false true true*/ /* * "."代表任何字符 * "/d"[0-9]的数字 * "/D"非[0-9]的数字[^d] *"/s"空白字符(包括空格,Tab键t,换行n,backspace后退键/x0B,制表符/f,回车/r) * "/S"非“空白字符”[^s] * "/w"单词字符[a-zA-Z_0-9] * "/W""非“单词字符”[^w] */ p(" nrt".matches("s{4}")); p(" ".matches("S")); p("a_8".matches("w{3}")); p("abc888&^%".matches("[a-z]{1,3}d+[&^#%]+")); p("".matches("\"));//在matches中,一个""要用""来表示 /* true false true true true*/ //POSIX Style p("a".matches("p{Lower}")); /*true*/ //边界匹配 //"^"位于中括号里面的时候是取反的意思,位于外面代表的是输入的开头 p("hello sir".matches("^h.*"));//以"h"开头 p("hello sir".matches(".*ir$"));//以"ir"结尾 p("hello sir".matches("^h[a-z]{1,3}ob.*"));//b一个单词的边界(空格,空白字符,换行,特殊字符) p("hellosir".matches("^h[a-z]{1,3}ob.*")); /*true true false*/ //把空白行找出来 p(" n".matches("^[s&&[^n]]*n"));//以空白字符开头,并且不是换行符,出现0次或多次 /*true*/ //匹配email地址的正则表达式(有得email地址是含有横线和点号的) p("basdbjasbkja@dasbdn.com".matches("[w[.-]]+@[w[.-]]+.[w]+")); //matches find lookingAt Pattern p1=Pattern.compile("d{3,5}");//编译正则表达式 String s="123-34345-234-00"; Matcher m1=p1.matcher(s); p(m1.matches()); //false //find()一段一段的匹配 //分析到“-”时,不符合p1的标准,认为结束 m1.reset();//matches与find一起使用时需要reset p(m1.find()); p(m1.start()+"-"+m1.end());//输出“-”的起始位置和结束位置(结束位置就是本身位置) p(m1.find()); p(m1.start()+"-"+m1.end()); p(m1.find()); p(m1.start()+"-"+m1.end()); p(m1.find()); // true // true // true // false p(m1.lookingAt()); //true //区别matches找整个串 //find找字串 //lookingAt每次都从头上开始找 //字符串的替换 Pattern p2=Pattern.compile("java",Pattern.CASE_INSENSITIVE);//CASE_INSENSITIVE忽略大小写 Matcher m2=p2.matcher("java Java JAVa JaVa IloveJAVA you hateJava lalalala"); while(m2.find()){ p(m2.group());//按组找 } p(m2.replaceAll("JAVA")); //全部改为JAVA JAVA JAVA JAVA IloveJAVA you hateJAVA m2.reset(); StringBuffer buf=new StringBuffer(); int i=0; while(m2.find()){ i++; if(i%2==0){//奇数大写偶数小写 m2.appendReplacement(buf,"java"); }else{ m2.appendReplacement(buf,"JAVA"); } } m2.appendTail(buf);//将尾巴加进去 p(buf); //JAVA java JAVA java IloveJAVA you hatejava lalalala //分组:使用小括号组成的,分了机组就有几对小括号 //每个组有自己的组号 Pattern p3=Pattern.compile("(d{3,5})([a-z]{2})"); String s1="123aa-12323bb-456cc-00"; Matcher m3=p3.matcher(s1); while(m3.find()){ p(m3.group());//按组找 p(m3.group(1)); p(m3.group(2)); } /*123aa 123 aa 12323bb 12323 bb 456cc 456 cc*/ } public static void p(Object o){ System.out.println(o); } }
把qiu_email.htm这个网页文件中的所有信息中属于邮箱地址的信息搜索出来 package cn.edu.RegularExpressions; import java.io.BufferedReader; import java.io.FileReader; import java.util.regex.Matcher; import java.util.regex.Pattern; public class EmailSpider { public static void main(String[] args) { try { BufferedReader br=new BufferedReader(new FileReader("F:Talkqiu_email.htm")); String line=""; while((line=br.readLine())!=null){ parse(line); } } catch (Exception e) { e.printStackTrace(); } } private static void parse(String line) { //email的正则表达式 Pattern p=Pattern.compile("[w[.-]]+@[w[.-]]+.[w]+"); Matcher m=p.matcher(line); while(m.find()){ System.out.println(m.group()); } } } 转载请注明出处:http://www.52php.cn/article/p-syfjaqej-bay.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |