快速掌握正則表示式,掌握常用的就ok
阿新 • • 發佈:2019-01-27
正則表示式其實只需要會用一些常用的的字元匹配規則,就能夠寫出大多數的字元匹配規則,下面就直接介紹一下常用正則表示式的匹配:
.--匹配任意一個字元
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();//是否匹配