zoukankan      html  css  js  c++  java
  • 【Java学习笔记】正则表达式

    作者:gnuhpc
    出处:http://www.cnblogs.com/gnuhpc/

    1.简介:

    正则表达式是Java 处理字符串、文本的重要工具。

    java.util.regex.Pattern   匹配类:用模式匹配一个字符串所表达的抽象结果。

    java.util.regex.Matcher   模式类:用来表示一个编译过的正则表达式。

     


    2.例子

    import java.util.regex.Pattern;

    public class RegexDemo1 {
        public static void main(String arg[]) {
            String expr;
            String str;

            expr = "p.t";
            str = "pot";
            boolean b = Pattern.matches(expr,str);//静态方法,直接调用
            if(b)
                System.out.println(str + " matches pattern " + expr);
            else
                System.out.println(str + " does not match pattern " + expr);
        }
    }

     

    但是这个例子中的expr每次都要进行编译才能进行匹配,而下面的例子则不需要。

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

    public class RegexDemo2 {
        public static void main(String arg[]) {
            String expr;
            String str;

            expr = "p//wt";//在Java语言中,//表示要插入正则表达式的反斜线,且后面的字符有特殊意义。
    /w 单词字符 
            str = "pot";
            Pattern pattern = Pattern.compile(expr);
            Matcher matcher = pattern.matcher(str);
            if(matcher.matches())
                System.out.println(str + " matches pattern " + expr);
            else
                System.out.println(str + " does not match pattern " + expr);
        }
    }

     

    以上这个例子中的pattern就可以重用了,比如:

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

    public class RegexDemo3 {
        public static void main(String arg[]) {
            String expr;

            expr = "p[aeiou]t";
            Pattern pattern = Pattern.compile(expr);
            for(int i=0; i<arg.length; i++) {
                Matcher matcher = pattern.matcher(arg[i]);
                if(matcher.matches())
                    System.out.println(arg[i] + " matches pattern " + expr);
                else
                    System.out.println(arg[i] + " does not match pattern " + expr);
            }
        }
    }

     

    查找在一个段落中的匹配地:

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

    public class RegexDemo4 {
        public static void main(String arg[]) {
            String expr;
            String str;

            expr = "bark";
            str = "This is a larger block of text the pattern matcher " +
                  "will search for the word bark. The pattern is very " +
                  "simple. It will only match the word bark, and nothing " +
                  "else. You can search a block of text for any of the " +
                  "regular expression patterns--not just bark.";
            Pattern pattern = Pattern.compile(expr);
            Matcher matcher = pattern.matcher(str);
            boolean found = matcher.find();
            while(found) {
                int location = matcher.start();
                System.out.println(expr + " found at " + location);
                found = matcher.find(location+1);
           }
        }
    }
    =================

    综合例子:

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

    /** 
    * 正则表达式例子 

    * @author leizhimin 2009-7-17 9:02:53 
    */ 
    public class TestRegx { 
            public static void main(String[] args) { 
                    Pattern p = Pattern.compile("f(.+?)k"); 
                    Matcher m = p.matcher("fckfkkfkf"); 
                    while (m.find()) { 
                            String s0 = m.group(); 
                            String s1 = m.group(1); 
                            System.out.println(s0 + "||" + s1); 
                    } 
                    System.out.println("---------"); 
                    m.reset("fucking!"); 
                    while (m.find()) { 
                            System.out.println(m.group()); 
                    } 

                    Pattern p1 = Pattern.compile("f(.+?)i(.+?)h"); 
                    Matcher m1 = p1.matcher("finishabigfishfrish"); 
                    while (m1.find()) { 
                            String s0 = m1.group(); 
                            String s1 = m1.group(1); 
                            String s2 = m1.group(2); 
                            System.out.println(s0 + "||" + s1 + "||" + s2); 
                    } 

                    System.out.println("---------"); 
                    Pattern p3 = Pattern.compile("(19|20)//d//d([- /.])(0[1-9]|1[012])//2(0[1-9]|[12][0-9]|3[01])"); 
                    Matcher m3 = p3.matcher("1900-01-01 2007/08/13 1900.01.01 1900 01 01 1900-01.01 1900 13 01 1900 02 31"); 
                    while (m3.find()) { 
                            System.out.println(m3.group()); 
                    } 
            } 
    }
     
    输出结果:
    fck||c 
    fkk||k 
    --------- 
    fuck 
    finish||in||s 
    fishfrish||ishfr||s 
    --------- 
    1900-01-01 
    2007/08/13 
    1900.01.01 
    1900 01 01 
    1900 02 31 

    Process finished with exit code 0

     

    作者:gnuhpc
    出处:http://www.cnblogs.com/gnuhpc/
  • 相关阅读:
    Android-调用优酷SDK上传视频
    新浪微博客户端(16)-获得并显示用户昵称
    新浪微博客户端(15)-保存用户名和密码
    转:Java NIO系列教程(九) Pipe
    新浪微博客户端(14)-截取回调地址中的授权成功的请求标记,换取access_token
    iOS-AFN "Request failed: unacceptable content-type: text/plain"
    新浪微博客户端(13)-使用UIWebView加载OAuth授权界面
    iOS-(kCFStreamErrorDomainSSL, -9802)
    转:Java NIO系列教程(八) DatagramChannel
    转:Java NIO系列教程(七) Socket Channel
  • 原文地址:https://www.cnblogs.com/gnuhpc/p/2822264.html
Copyright © 2011-2022 走看看