【JAVA基础】正则表达式

来源:互联网 发布:java线程安全解决 编辑:程序博客网 时间:2024/04/28 16:21
正则表达式:RegularExpressions(字符串处理利器)

都在java.util.regex.*;包中

样例:
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}\\.\\d{1,3}\\.\\d{1,3}"));p("11:"+"192".matches("[0-2][0-9][0-9]"));//“[]”代表一个范围/*结果:1:true2:true3:true4:true5:true6:false7:true8:true9:true10:false11: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]]"));/*truefalsetruefalsetruetrue*//* * "."代表任何字符 * "/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(" \n\r\t".matches("\\s{4}"));p(" ".matches("\\S"));p("a_8".matches("\\w{3}"));p("abc888&^%".matches("[a-z]{1,3}\\d+[&^#%]+"));p("\\".matches("\\\\"));//在matches中,一个"\"要用"\\"来表示/*truefalsetruetruetrue*///POSIX Stylep("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}o\\b.*"));//\b一个单词的边界(空格,空白字符,换行,特殊字符)p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));/*truetrue false*///把空白行找出来p(" \n".matches("^[\\s&&[^\\n]]*\\n"));//以空白字符开头,并且不是换行符,出现0次或多次/*true*///匹配email地址的正则表达式(有得email地址是含有横线和点号的)p("basdbjasbkja@dasbdn.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));//matches find lookingAtPattern 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一起使用时需要resetp(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//falsep(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 hateJAVAm2.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));}/*123aa123aa12323bb12323bb456cc456cc*/}public static void p(Object o){System.out.println(o);}}

转载请注明出处:http://blog.csdn.net/acmman
0 0
原创粉丝点击