java使用正则表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java使用正则表达式相关的知识,希望对你有一定的参考价值。
package com.regexp; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { //正则表达式 //一个 "." 代表一个任意字符 p("abc".matches("...")); //"\d"代表一个数字, \D相当于不是数字, 对\d取反 p("as897as98fsg6dfg9sddf".replaceAll("\\d", "_")); //Pattern可以编译正则表达式的一个模式 Pattern p = Pattern.compile("[a-z]{3}"); Matcher m = p.matcher("erf"); p(m.matches());//matches()方法永远是匹配整个字符串 //以上三行代码相当于下面这一句, 但是上面三句性能比较高 //{n}, 一定出现n次 //{n,}, 至少出现n次, 最多不限 //{n,m}, 至少出现n次, 不超过m次 p("qqq".matches("[a-z]{3}")); //初步认识".", "*", "+", "?" MataData(源数据) p("a".matches("."));//一个任意字符 p("aa".matches("aa")); p("aaaa".matches("a*"));//0个或多个 p("aaaa".matches("a+"));//1个或多个 p("aaaa".matches("a?"));//1个或不存在 p("".matches("a?"));//零宽度匹配 p("a".matches("a?")); p("45913549872168435".matches("\\d{3,10}")); p("192.168.0.222".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("l".matches("[^abc]"));//"^"除了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]]"));//同事满足两个范围 //认识\d \s \\u \ p(" \n\t\r".matches("\\s{4}"));//"\s"是空白字符, 比如空格, 换行符, 制表符等 p("发".matches("\\S{1,8}"));//"\S"是对"\s"的取反 p("a_8".matches("\\w{3}"));//"\w"指的可以用作命名的字符:大小写字母下划线+数字 p("abc807$%".matches("[a-z]{1,3}\\d+[&^%$]+")); p("\\".matches("\\\\")); //边界匹配器 p("hello sir".matches("^h.*"));//"^"在"[]"外面的时候代表的是一行的开始 p("hello sir".matches(".*ir$"));//"$"放在最后代表的是一行的结束 p("hello#sir".matches("^h[a-z]{3}o\\b.*"));//"\b"单词边界可以包括那些空白字符或者"\W"等 p("hellosir".matches("^h[a-z]{3}o\\b.*")); //过滤空白行("*"是用来修饰"^[\\s&&[^\\n]") p(" \t \n".matches("^[\\s&&[^\\n]]*\\n$")); //Email地址 p("[email protected]".matches("[\\w[.-]][email protected][\\w[.-]]+.[\\w]+")); //matches.find()方法是查找字符串中符合正则表达式的子字符串 //正则表达式的搜索引擎需要注意的一点 Pattern p1 = Pattern.compile("\\d{3,5}"); String s = "123-4567-8912-12345-ac"; p("字符串的总长度: "+s.length()); Matcher m1 = p1.matcher(s); p(m1.matches()); //当执行完上面一行代码, 正则表达式引擎已经将String s匹配完了, 后面的几个find()方法是从"4567..."开始找的 //也就是说find()方法和matches()是相互影响的 m1.reset();//调用reset()方法可以解决find和matches相互影响 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()); p(m1.start()+"----------"+m1.end()); p(m1.find()); //如果想要输出找到的子字符串的位置, 前提是必须要能找到, 否则再执行下面这行代码就会报错 ! p(m1.start()+"----------"+m1.end()); //lookingAt()方法是从整个字符串的开始位置去查找 p(m1.lookingAt()); p(m1.lookingAt()); p(m1.lookingAt()); p(m1.lookingAt()); //简单做个练习, 找出所有的网址 String news = "民生在勤,勤则不匮www.baidu.com——习大大曾用2000多年前《左传》中的古语阐www.sina.com.cn释最朴实的道理。" + "2013spring.io年4月28日," + "习大大在全国总工会机关同全国www.qq.com劳动模范代表座谈时强调," + "必须牢固树立www.hanqi.net劳动最光荣、劳动最崇高、劳动最伟大、劳动最美丽的观念,崇尚劳动,造福劳动者," + "让全体人民进一步焕发劳动热情、释放创造news.ifeng.com潜能,通过劳动创造更加美好的生活。"; System.out.println(news); Pattern p2 = Pattern.compile("[[a-z][.]]+[\\w]+"); Matcher m2 = p2.matcher(news); while(m2.find()) { //p(news.substring(m2.start(), m2.end())); p(m2.group()); } //字符串的替换 //Pattern.CASE_INSENSITIVE(Pattern里面的一个常量, 忽略大小写) Pattern p3 = Pattern.compile("java", Pattern.CASE_INSENSITIVE); String s1 = "java Java jaVA JAVA jaVa i like jAva qwert"; Matcher m3 = p3.matcher(s1); int b=0; StringBuffer buf = new StringBuffer(); while(m3.find()) { //replaceAll直接返回已经替换的整个字符串 //p(m.replaceAll("java")); b++; //如果要把偶数位的java替换成小写, 奇数位的替换成大写 if(b%2==0) { m3.appendReplacement(buf, "java"); } else { m3.appendReplacement(buf, "JAVA"); } } m.appendTail(buf); p(buf.toString()); //正则表达式的分组 //应用: 在下面的例子中, 如果想取出每一个匹配的字符串之后, 还想取出只是数字的字符串 // 可以使用分组, 分组规则, 从左往右数第几个"(", 就是第几个分组 Pattern p4 = Pattern.compile("((\\d{3,5})([a-z]{2}))"); String s2 = "123av-4567aa-8912qq-12345vv-ac"; Matcher m4 = p4.matcher(s2); while(m4.find()) { p(m4.group(3)); } } public static void p(Object o) { System.out.println(o); } }
以上是关于java使用正则表达式的主要内容,如果未能解决你的问题,请参考以下文章