• java学习:正则表达式


    正则表达式中元字符的用法:

    一、元字符的用法

    元字符 说明
    . 匹配任何单个字符。例如正则表达式“b.g”能匹配如下字符串:“big”,“bug”,“b g”,但不能匹配“buug”
    $ 匹配任何结束符。例如正则表达式“EJB$”能够匹配字符串“I like EJB”的末尾,但是不能匹配字符串“J2EE Without EJBs!”
    ^ 匹配一行的开始。例如正则表达式“^Spring”能够匹配字符串“Spring is a J2EE”的开始,但是不能匹配“I use Spring in my project”
    * 匹配0至多个在它之前的字符。例如正则表达式“zo*”能匹配“z”以及“zoo”;正则表达式“.*”意味着能够匹配任意字符串
    \ 转义符,用来将元字符当作普通的字符来进行匹配。例如正则表达式\$被用来匹配美元符号,而不是行尾;正则表达式\.用来匹配点字符,而不是任何字符的通配符
    [] 匹配括号中的任何一个字符。例如正则表达式“b[aiu]”匹配bag,big和bug,但是不匹配beg。可以在括号中使用连字符“-”来指定字符的区间来简化表示,例如正则表达式[0-9]可以匹配任何数字字符,这样正则表达式“a[0-9]c”就可以匹配“a0c”,“a1c”,“a2c”等字符串;还可以制定多个区间,例如“[A-Za-z]”可以匹配任何大小写字母。还有一个相配合使用的元字符“^”,用在这里并不像前边的那个“^”一样表示匹配行开始,而是表示排除,例如“[&163A-Z]”将能够匹配除了1,6,3和所有大写字母之外的任何字符
    () 将()之间括起的表达式定义为组(group),并且将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的时候非常有用。
    | 将两个匹配条件进行逻辑“或”运算。“z|food”能匹配“z”或“food”。“(z|f)ood”则能匹配“zood”或“food”
    + 匹配前面的子表达式,1次或多次。例如正则表达式9+匹配9,99,999等
    匹配前面的子表达式,0次或多次,例如,“do(es)?”可以匹配“do”或“does”中的“do”。此元字符还有另外一个用途,就是表示非贪婪模式匹配
    {n} 匹配确定的n次。例如,“e{2}”不能匹配“bed”中的“e”,但是能匹配“seed”中的两个“e”
    {n,} 至少匹配n次。例如“e{2,}”不能匹配“bed”中的“e”,但能匹配“seeeeeed”中的所有“e”
    {n,m} 最少匹配n次且最多匹配m次。“e{1,3}”将匹配“seeeeeeeed”中的前三个“e”

    二、Java中的正则表达式API

    jdk1.4开始提供了支持正则表达式的API,它们位于java.util.regex包中。之前的版本,则需要借助于第三方库。

    java.util.regex中定义了一些表达式的简写,可以使得表达式显得更加简洁和清晰

    \t 制表符,等同于\u0009
    \n 换行符,等同于\u000A
    \d 代表一个数字,等同于[0-9]
    \D 代表非数字,等同于[^0-9]
    \s 代表换行符,制表符等空白字符
    \S 代表非空白字符
    \w 字母字符,等同于[a-zA-Z_0-9]
    \W 非字母字符,等同于[^\w]

    三,正则表达式的使用。

    前面是基础,非常重要,因此专门抄了一遍。

    代码相对而言反而简单:

    {
    //匹配
    System.out.println( Pattern.matches("[0-9]{6}", "100830") );//true
    System.out.println( Pattern.matches("\\d{6}", "123456"));//true
    }
    {
    //提取文件名
    String regEx = ".+/(.+)$";//这儿()表示分组的概念,分组的索引是从1开始的,
                              //因此后面取得第一个分组的方法是m.group(1)
    String strpath = "c:/dir1/dir2/name.txt";
    Pattern p = Pattern.compile(regEx);
    Matcher m = p.matcher(strpath);
    if(m.find())
        System.out.println(m.group(1));//name.txt
    else
        System.out.println("文件格式错误!");
    }
     
    {
    //字符替换
    String regEx = "a+";
    Pattern p =  Pattern.compile(regEx);
    Matcher m = p.matcher("okaaaa LetmeAseeaaa aa booa");
    String s = m.replaceAll("A");
    System.out.println(s);//okA LetmeAseeA A booA
    }
     
    {
    //验证身份证号
    System.out.println(Pattern.matches("\\d{15}|\\d{18}", "123456789012345"));    //true
    }
    {
    //中文提取
    String f = "welcome to china, 靠山啊,yes,谢谢!"    ;
    Pattern p = Pattern.compile("[\\u4E00-\\u9FFF]+");
    Matcher matcher = p.matcher(f);
    StringBuffer sb = new StringBuffer();
    while(matcher.find())
    {
        sb.append(matcher.group());
    }
    System.out.println(sb);
    }
    //验证Email
    private static void validateEmail(String mail)
    {
        Pattern p = Pattern.compile("[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-zA-Z0-9]+");
        Matcher m = p.matcher(mail);
        if(m.matches())
        {
            System.out.println("合法的email");
        }
        else
        {
            System.out.println("非法的email");
        }
    }
    public static void main( String[] args )
    {
        validateEmail("email@mail.com");
        validateEmail("www.baidu.com");    
    }

    以下例子为解析URL

     
    public class URLInfo
    {
        private String protocal;
        private String path;
        private String host;
        public URLInfo()
        {
            super();
        }
        public String getHost()
        {
            return host;
        }
        public void setHost(String host)
        {
            this.host = host;
        }
        public String getPath()
        {
            return path;
        }
        public void setPath(String path)
        {
            this.path = path;
        }
        public String getProtocal()
        {
            return protocal;
        }
        public void setProtocal(String protocal)
        {
            this.protocal = protocal;
        }
        
    }
     
    public class Reg08ExtractURL
    {
        public static void main(String[] args)
        {
            URLInfo urlinfo = parseURL("ftp://www.ftp.com/incoming/movie.rm");
            System.out.println(String.format("protocal:%s, host:%s, path:%s",
                    urlinfo.getProtocal(), urlinfo.getHost(), urlinfo.getPath()));
     
            URLInfo urlinfo2 = parseURL("http://www.163.com/index.jsp?userId=00333");
            System.out.println(String.format("protocal:%s, host:%s, path:%s",
                    urlinfo2.getProtocal(), urlinfo2.getHost(), urlinfo2.getPath()));
        }
        
        private static URLInfo parseURL(String url)
        {
            Pattern p = Pattern.compile("([a-zA-Z]+)://([^/:]+)([^#]*)");
            Matcher mat = p.matcher(url);
            mat.find();
            URLInfo info = new URLInfo();
            info.setProtocal(mat.group(1));
            info.setHost(mat.group(2));
            info.setPath(mat.group(3));
            return info;
        }
    }
  • 相关阅读:
    kbmmw 5.14.00 发布
    关于C++ auto使用要注意的一点
    git设置socks5代理
    电子书分享网站
    spring cache相关
    intellij idea开启debug热加载/热部署
    git 多次commit合并成一次提交
    es feature一览
    数据中台
    Java Agent
  • 原文地址:https://www.cnblogs.com/luhouxiang/p/2182233.html
Copyright © 2020-2023  润新知