正则表达式

正则表达式用法:

package org.learning.javaLearning;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex {
    /**
     * 关于正则表达式
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        System.out.println("Greedy方式:**********");
        p("a".matches("."));//.任意字符
        p("aa".matches("aa"));
        p("aaa".matches("a*"));//a* a零次或多次
        p("".matches("a*"));
        p("a".matches("a?"));//a? a零次或一次
        p("".matches("a?"));
        p("aaaaa".matches("a+"));//a+ a一次或多次
        p("a".matches("a+"));
        p("aa".matches("a{2}"));//a{n} a恰好n次
        p("aaa".matches("a{2,}"));//a{n,} a至少n次
        p("aaaa".matches("a{2,4}"));//a{n,m} a至少n次至多m次
        // \进行转义 \d代表数字  \ . 代表 .
        p("192.168.0.127".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
        p("192".matches("[0-2][0-9][0-9]"));//有三个数字,第一个0-2,第二个0-9,第三个0-9之间的数字
        
        System.out.println("关于范围:**********");
        p("b".matches("[abc]"));// [abc] a或b或c
        p("b".matches("[^abc]"));// [^abc] 非a,b,c
        p("b".matches("[a-zA-Z]"));// [a-zA-Z] a-z或A-Z
        p("b".matches("[a-z[m-o]]"));// [a-z[m-o]] a-z或m-o [a-zm-o]
        p("b".matches("[a-z&&[def]]"));// [a-z&&[def]] a-z之间且是d或e或f 交集
        p("b".matches("[a-z&&[^def]]"));// [a-z&&[^def]] a-z之间且除了def
        p("b".matches("[a-z&&[^b-d]]"));// [a-z&&[^b-d]] a-z之间且除了[b-d]之间的
    
        System.out.println("关于空白字符,数字,单词字符:**********");
        p("123ccc".matches("\\d{1,3}[a-z]{1,3}"));// \d 数字
        p("4567cccc".matches("\\D{1,4}[a-z]{1,4}"));// \D 非数字
        p("\t\n\f\r".matches("\\s{1,5}"));// \s空白字符:\t空格 \n换行符 \x0B \f换页符 \r回车
        p("\t".matches("\\S"));// \S非空白字符
        p("string".matches("\\w{1,6}"));// \w单词字符 [a-zA-Z_0-9]
        p("int".matches("\\W(3)"));// \W非单词字符
        
        System.out.println("关于边界匹配:**********");
        // ^ $ \b \B \A输入的开始 \z \Z输入的结尾 \G上一个匹配的结尾
        p("Hello regix!".matches("^H.*"));// ^匹配行的开头
        p("Hello regix!".matches(".*regix!$"));// $ 匹配的行结尾
        p("Hello regix!".matches("^H[a-z]{1,4}\\b.*!$"));// \b 单词边界,指前边的Hello为一个单词
        p("HelloHash!".matches("^H[a-z]{1,4}\\B.*!$"));// \B 非单词边界
        
        //邮箱验证[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+
        //+ 代表前面的字符至少出现一次(一次或多次)
        //*代表字符可出现也可不出现(零次或一次或多次)
        //?代表前面的字符最多出现一次(零次或一次)
        System.out.println("邮箱验证:**********");
        p("1936364685@qq.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));
        
        //表达式:网络协议地址:^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*$
        System.out.println("网址验证:***********");
        Pattern p1=Pattern.compile("^([Hh][Tt]{2}[Pp]://|^[Hh][Tt]{2}[Pp][Ss]://|^[Ff][Tt][Pp]://)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\\/])+$");
        Matcher m1=p1.matcher("http://localhost:8080/haha.wl");
        Matcher m2=p1.matcher("https://imooc.com");
        p(m1.matches());
        p(m2.matches());
    
        System.out.println("Matcher类的matches()、lookAt()和find()的区别:");
        
        Pattern pp=Pattern.compile("\\d{3,5}");
        Matcher mm=pp.matcher("123-33456-111-00");
        
        p(mm.matches());//完全匹配时为true,只有整个字符序列完全匹配成功,才返回True,否则返回False。但如果前部分匹配成功,将移动下次匹配的位置。
        
        mm.find();//部分匹配时即为true,从当前位置开始匹配,找到一个匹配的子串,将移动下次匹配的位置。
        System.out.print("当前匹配位置:");
        p(mm.start());//前边matches()虽然匹配失败,但123与pattern匹配成功,匹配位置移动到位置4上
        
        mm.reset();//重置匹配位置
        p(mm.find());
        System.out.print("find第一次匹配的目标:");
        p(mm.group());
        System.out.print("find第一次匹配的位置:");
        p(mm.start());
        
        p(mm.find());
        System.out.print("find第二次匹配的目标:");
        p(mm.group());
        System.out.print("find第二次匹配的位置:");
        p(mm.start());
        
        p(mm.lookingAt());//部分匹配即为true,总是从第一个字符进行匹配,匹配成功了不再继续匹配,匹配失败了,也不继续匹配。
        System.out.print("lookingAt第一次匹配的目标:");
        p(mm.group());
        System.out.print("lookingAt第一次匹配的位置:");
        p(mm.start());
    }
    
    public static void p(Object o) {
        System.out.println(o);
    }

}

 

 

posted @ 2019-04-04 12:09  肥猫桂子  阅读(164)  评论(0编辑  收藏  举报