javaRegex基礎知識

來源:互聯網
上載者:User

標籤:blank   bcd   match   exp   輸出   als   pre   tar   分組   

1基礎2.1 簡單字元類
構造 描述
[abc] a,b或c
[^abc] 除a,b或c外的字元
[a-zA-Z] a至z 或 A至Z
[a-d[m-p]] a至d 或 m至p
[a-z&&[def]] d,e或f
@Testpublic void testChar() {    //匹配 b,c或d    assertTrue("d".matches("[bcd]"));    //匹配除 a,b,c 以外的字元 (否定)    assertTrue("d".matches("[^abc]"));    //匹配 a至z 的任一字元 (範圍)    assertTrue("d".matches("[a-z]"));    //匹配 d,e或f (交集)    assertTrue("d".matches("[a-z&&[def]]"));}

 

2.2 預定義字元類
構造 描述
. 任一字元
\d 一個數字 [0-9]
\D 一個非數字 [^0-9]
\s 空白字元 [ \t\n\x0B\f\r]
\S 非Null 字元
\w 常規字元 [a-zA-Z_0-9]
\W 非常規字元
@Testpublic void testPredef() {    //匹配 任一字元 (可能不匹配行終止符)    assertTrue("d".matches("."));    //匹配 數字    assertTrue("4".matches("\\d"));    //匹配 非數字    assertTrue("d".matches("\\D"));    //匹配 空白字元 [ \t\n\x0B\f\r]    assertTrue(" ".matches("\\s"));    //匹配 非Null 字元    assertTrue("d".matches("\\S"));    //匹配 常規字元 [a-zA-Z_0-9]    assertTrue("d".matches("\\w"));    //匹配 非常規字元    assertTrue("!".matches("\\W"));}

 

2.3 量詞
貪心 勉強 描述
X? X?? X出現一次或沒有
X* X*? X出現零次或多次
X+ X+? X出現一次或多次
X{n} X{n}? X出現n次
X{n,} X{n,}? X出現至少n次
X{n,m} X{n,m}? X出現至少n次,至多m次
@Testpublic void testQuant() {    // * 表示出現0次或多次 (貪心,最大匹配)    assertEquals("<b>d<b>".replaceAll("<.*>","#"),"#");    // * 表示出現0次或多次,? 表示最小匹配    assertEquals("<b>d<b>".replaceAll("<.*?>","#"),"#d#");    // + 表示出現1次或多次 (貪心,最大匹配)    assertEquals("<b>d<b>".replaceAll("<.+>","#"),"#");    // * 表示出現1次或多次,? 表示最小匹配    assertEquals("<b>d<b>".replaceAll("<.+?>","#"),"#d#");    // {1} 表示出現1次    assertEquals("<b>d<b>".replaceAll("<.{1}>","#"),"#d#");    // {1,} 表示出現1次至多次    assertEquals("<b>d<b>".replaceAll("<.{1,}>","#"),"#");    // {1,8} 表示出現1次至8次    assertEquals("<b>d<b>".replaceAll("<.{1,8}>","#"),"#");}

 

2.4 分組
@Testpublic void testGroup() {    // () 表示分組,?表示出現0次或1次,\\d\\d表示兩個數字    assertFalse("du2".matches("du(\\d\\d)?"));    // 匹配    assertTrue("du12".matches("du(\\d\\d)?"));    // 不匹配,分組條件出現了2次    assertFalse("du1212".matches("du(\\d\\d)?"));    // 匹配    assertTrue("du1212".matches("du(\\d\\d)+"));}

 

2.5 邊界匹配
邊界構造 描述
^ 行開始
$ 行結尾
\b 單詞邊界
\B 非單詞邊界
\A 輸入開始
\z 輸入結尾
@Testpublic void testBound() {    // ^ 行開始    assertTrue("42du".matches("^(\\d\\d)du"));    // $ 行結尾    assertTrue("42du".matches("\\d\\d(du)$"));    // \\b 表示單詞邊界    assertTrue("a dog".matches(".*\\bdog\\b"));    // \\B 表示非單詞邊界    assertTrue("a doggie".matches(".*\\bdog\\B.*"));}

 

2.6 Pattern和Matcher基本
import java.util.regex.Matcher;import java.util.regex.Pattern;public class MatcherDemo {    public static void main(String[] args){        // 不區分大小寫        Pattern pattern = Pattern.compile("\\bdog\\B",Pattern.CASE_INSENSITIVE);        Matcher matcher = pattern.matcher("The Doggie plays");        while (matcher.find()) {            System.out.println(matcher.group());            System.out.println(matcher.start());            System.out.println(matcher.end());        }    }}

 

輸出

Dog47
3 樣本3.1 使用者名稱正則
/**  ^            開頭*   [a-z0-9_-]  匹配a-z,0-9,底線,中線*    {4,10}     長度4至10*  $            結尾*/String unReg = "^[a-z0-9_-]{4,10}$";

 

3.2 顏色正則
/**    ^    開頭*     #         "#" 符號*    (         開始分組*      [A-Fa-f0-9]{6} 長度為6的字母數字*      |              或*      [A-Fa-f0-9]{3} 長度為3的字母數字*    )         分組結束*    $    結尾*/String coReg = "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$";

 

3.3 24時制時間
/* *  (    分組開始 *    [01]?[0-9]    0-9,00-09,10-19 *    |                或 *    2[0-3]        20-23 *  )    分組結束 *  :     :符號 *  [0-5][0-9]    00 至 59 */String tiReg = "([01]?[0-9]|2[0-3]):[0-5][0-9]";

 

4 結語

本文簡要介紹了javaRegex的最基礎的知識內容,並給出了簡單實用的小例子來理解消化所學內容。要想熟練掌握這些基礎知識,還要動手多加以練習,閱讀官方文檔。javaRegex的進階的內容我會在下一篇文章裡進行介紹。
推薦javaRegex學習的一些資料:

官方:docs.oracle.com

英文:vogella.com

中文:runoob.com

javaRegex基礎知識(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.