1. 程式人生 > >快速掌握正則表示式,掌握常用的就ok

快速掌握正則表示式,掌握常用的就ok

正則表示式其實只需要會用一些常用的的字元匹配規則,就能夠寫出大多數的字元匹配規則,下面就直接介紹一下常用正則表示式的匹配:
.--匹配任意一個字元
X*--表示字元X出現了0次或者多次
X+--表示字元X出現了1次或者多次
X?--表示字元X出現0次或者1次
        // .表示任意一個字元(a字元是否匹配.)
        System.out.println("a".matches("."));//true
        // x*表示x出現0次或者多次(,a字元是否匹配a*)
        System.out.println("a".matches("a*"));//true
        // x+表示x出現1次或者多次(aaaa是否匹配a+)
System.out.println("aaaa".matches("a+"));//true // x?表示x出現0次或者1次(a是否匹配a?) System.out.println("a".matches("a?"));//true
[abc]--表示字元a,b,c中的任意一個,[]裡面無論有多少內容,都代表匹配的是一個字元 
[^abc]--任何字元,除了 a、b 或 c(否定), []裡面有^代表取反
[a-z&&[def]]--d、e 或 f(交集)//(&&表示取交集)
[a-z|A-Z]---a 到 z 或 A 到 Z中的一個(並集)//(|代表取並集,在[]內可以省略,像下面那樣)
也可以這樣表示[a-zA-Z]或者[[a-z][A-Z]]或者[a-z[A-Z]]
        //是否取反
       System.out.println("a".matches("[abc]"));//true
       System.out.println("a".matches("[^abc]"));//false
       //並集,一個意思
       System.out.println("a".matches("[a-zA-Z]"));//true
       System.out.println("B".matches("[a-z|A-Z]"));//true
       System.out.println("a".matches("[a-z[A-Z]]"
));//true System.out.println("a".matches("[a-z]|[A-Z]"));//true //交集 System.out.println("G".matches("[A-Z&&[RFG]]"));//true
\d--表示的是[0-9]中的一個數字
\s--表示空白字元(比如製表符,換行符.回車符等)
\w--表示單詞字元[0-9A-Za-z_]中的一個
\\--表示\
補充一下 在java中\不代表任何轉義字元,如果想要表示反斜槓
       在java中需要在反斜槓前面加一個\轉義表示一個"\"
       在正則表示式中含有"\"的時候,需要加一個\再次轉義,為了區分java
        System.out.println("1".matches("\\d"));//true
        System.out.println(" ".matches("\\s"));//true
        System.out.println("_".matches("\\w"));//true
        //java中書寫的時候\\代表一個\,在正則表示式中\\才匹配一個\,
        // 在正則表示式中含有"\"的時候,需要加一個\再次轉義,為了區分java
        //這裡正則表示式中含有兩個\,所以要轉義2次
        System.out.println("\\".matches("\\\\"));//true
X{n}--表示字元X出現n次
X{n,}--表示字元X至少出現n次
X{n,m}--表示字元X最少出現n次,最多出現m次
        // 數字出現5次
        System.out.println("12345".matches("\\d{5}"));//true
        // 數字至少出現5次
        System.out.println("123456".matches("\\d{5,}"));//true
        // 數字至少出現5次,最多出現7次
        System.out.println("1234567".matches("\\d{5,7}"));//ture
^--表示行的開頭
$--表示行的結尾
        // ^表示一行的開頭,只用於開頭,注意區分[]內的^
        System.out.println("hello sir".matches("^h.*"));//true
        // $表示一行的結尾,只用於結尾
        System.out.println("hello sir".matches(".*ir$"));//true

最後補充一下,上面我們一使用String類中matches方法,然而正則表示式還是要使用下面這種方式來匹配比較好,效率更高一些。

 Pattern p = Pattern.compile("a*b");// 先編譯一下正則表示式的字串,之後產生的一個模式
 Matcher m = p.matcher("aaaaab");//這種模式匹配一下字串之後產生的結果
 boolean b = m.matches();//是否匹配