JAVA正则

来源:互联网 发布:前端程序员 编辑:程序博客网 时间:2024/06/06 05:39

正则表达式常用构造摘要
    字符类 
    [abc] a、b 或 c(简单类) 
    [^abc] 任何字符,除了 a、b 或 c(否定) 
    [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)

    预定义字符类 
    . 任何字符(与行结束符可能匹配也可能不匹配) 
    \d 数字:[0-9] 
    \D 非数字: [^0-9] 
    \s 空白字符:[ \t\n\x0B\f\r] 
    \S 非空白字符:[^\s] 
    \w 单词字符:[a-zA-Z_0-9] 
    \W 非单词字符:[^\w]

    Greedy 数量词 
    X?       X,一次或一次也没有 
    X*       X,零次或多次 
    X+      X,一次或多次 
    X{n}     X,恰好 n 次 
    X{n,}    X,至少 n 次 
    X{n,m} X,至少 n 次,但是不超过 m 次

    边界匹配器 
    ^ 行的开头 
    $ 行的结尾 
    \b 单词边界 
    \B 非单词边界 
    \A 输入的开头 
    \G 上一个匹配的结尾 
    \Z 输入的结尾,仅用于最后的结束符(如果有的话) 
    \z 输入的结尾

    正则表达式常见功能:匹配、切割、替换、获取


/* 正则表达式:符合一定规则的表达式 作用:用于专门操作字符串 特点:用一些特定的符号来表示一些代码的操作,这样就简化书写。 所以学习正则表达工,就是在学习一些特殊符号的使用 好处:可以简化对字符串的复杂操作。 弊端:符号定义越多,正则越长,阅读性越差  具体操作功能: 1.匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false */  public class RegexDemo {     public static void main(String[] args) {         checkQQ();         demo();         splitDemo("zhangsan,lishi,wangwu",",");//按照,进行切换         splitDemo("zhangsan    lishi    wangwu"," +");//按照多个空格进行切割         splitDemo("zhangsan.lishi.wangwu","\\.");//按照多个空格进行切割         splitDemo("c:\\abc\\a.txt","\\\\");//去掉反斜杠         splitDemo("erkktykkqqquio","(.)\\1+" );//按照叠词来完成切割                                                 //可以将规则封装成一个组,用()完成,组出现都有编号,从1开始,想要使用已有的组可以通过                                                  //\n(n就是组的编号)的形式来获取         replaceDemo("s  tr in  g"," +"," ");//将多个空格替换成一个空格          String str="wer1289980000ty12345654uiod12435676f";         replaceDemo(str,"\\d{5,}","#");//将数字替换成#         String str1="erkktyqqquizzzzzo";         replaceDemo(str1,"(.)\\1+","&");//将叠词替换成&         replaceDemo(str1,"(.)\\1+","$1");//叠词替换成一个,$1表示拿前一个规则的第一个组          getDemo();     }     /*     正则表达式的第四个功能     4.获取:将字符串的符合规则的子串取出     操作步骤:     1.将正则表达式封装成对象     2.让正则表达对象和要操作的字符串相关联     3.关联后,获取正则匹配引擎     4.通过引擎对符合规则的子串进行操作,比如取出     */     public static void getDemo(){         String str="ming jian jiu yao fang jia le ,da jia.";         String reg="\\b[a-z]{4}\\b";         //将规则封装成对象         Pattern p =Pattern.compile(reg);         //让正则表达对象和要操作的字符串相关联         Matcher m=p.matcher(str);         System.out.println(m.matches());         //其实String类中的matches方法,用的就是 pattern和mattcher对象来完成的         //只不过被String的方法封装后,用起来较为简单,但是功能单一         boolean b=m.find();//将规则使用到字符串上,并进行符合规则的子串查找         System.out.println(b);         //System.out.println(m.group());//用于获取匹配后的结果         //System.out.println("matchers:"+m.matches());         while(m.find()){             System.out.println(m.group());             System.err.println(m.start()+"..."+m.end());         }     }     //替换     public static void replaceDemo(String str,String regex,String newStr){         String s=str.replaceAll(regex,newStr);         System.out.println(s);     }     //切割     public static void splitDemo(String str,String regex){         String[] arr=str.split(regex);         for(String s:arr){             System.out.println(s);         }     }     //\\d 代表'\d'     public static void demo(){         String str="bc9999";         String regex="[bcd][a-z]\\d+";//表示第一个字符只能是bcd中一个,且只有一字符,第二个字符只能是a-z         boolean flag=str.matches(regex);         System.out.println(flag);         checkTel();              }     /*     匹配     手机号段只有 13xxx 15xxx 18xxx     */     public static void checkTel(){         String tel="13800000000";         String telReg="1[358]\\d{9}";         boolean b=tel.matches(telReg);         System.out.println(b);     }     /*     正则验证QQ号码     */     public static void checkQQ(){         String qq="02121212";         String regex="[1-9]\\d{4,14}";         boolean flag=qq.matches(regex);         if(flag){             System.out.println("is ok...");         }else{             System.out.println("is nonono...");         }              }     /*     对QQ号码进行校验     要求:5-15 0不能开头,只能是数字     这种方式:使用了String类中的方法,进行组合完成了需求 ,但是代码过于复杂     */     public static void checkQQ_1() {         String qq = "12345";         int len = qq.length();         if (len >= 5 && len <= 15) {             if (!qq.startsWith("0")) {                 try{                     Long l=Long.parseLong(qq);                     System.out.println("qq:"+qq);                 }catch(NumberFormatException e){                     System.out.println("出现了非法字符");                 }                                  /*char[] arr = qq.toCharArray();                boolean flag = false;                for (int x = 0; x < arr.length; x++) {                    if (!(arr[x] >= '0' && arr[x] <= '9')) {                        flag = true;                        break;                    }                }                if (!flag) {                    System.err.println("qq:" + qq);                } else {                    System.out.println("qq号码中现了非法字符 ");                }*/             }else{                 System.out.println("不可以0开始");             }         }else{             System.out.println("长度错误");         }     }  //例如:"abcd123.456",得到"123.45",如果数字没有小数点,要得到两位为0的小数,例如:"abcd123",得到"123.00".   public static  String getString(String str) {         String getNumber;         getNumber = str.replaceAll("[a-z|A-Z]", "");         if (getNumber.indexOf(".") == -1) {             getNumber = getNumber + ".00";         } else {             if (getNumber.indexOf(".") == getNumber.length() - 1) {                 getNumber = getNumber + "00";             } else if (getNumber.indexOf(".") == getNumber.length() - 2) {                 getNumber = getNumber + "0";             } else {                 getNumber = getNumber.substring(0, getNumber.indexOf(".") + 3);             }         }         return getNumber;     }  }

1 0
原创粉丝点击