更多課程 選擇中心
        Java培訓

        400-111-8989

        Java培訓 > Java教程  > 正文

        Java正則表達式基礎知識--5個學習步驟

        • 發布:Java培訓
        • 來源:Java教程
        • 時間:2018-02-01 11:44

        Java正則表達式基礎知識--5個學習步驟

        正則表達式學習步驟:

        1. 了解正則表達式概念及基本構造元素(本文目標);

        2. 通過練習能夠編寫出準確的可讀性較好的正則表達式,熟悉常用正則表達式;

        3. 理解正則引擎的內部機制及實現,能夠分析正則表達式的效率;

        4. 能夠編寫效率更高的正則表達式(以準確性和可讀性為前提);

        5. 能夠運用正則表達式去處理復雜的文本處理問題。

        一、 概述

        1. 正則表達式是一個字符序列,用來描述文本的模式結構的表達式,亦可看做一門“微型語言”。因此,尤其適用于文本處理。

        2. 一個文本模式可能有多種正則表達式寫法,有的簡單清晰,有的快速但復雜,有的功能全面,有的兼容性好,要多多嘗試加以權衡。

        3. 正則表達式是“文本內匹配”。

        4. 正則表達式的準確性: 匹配期望的文本,同時不匹配不期望的文本。

        比如, 匹配三位數,可使用\d{3},但這樣會匹配001這樣的數,準確的寫法應是: [1-9]\d{2}

        5. 匹配分析的思路最好采用“逐字符方式”。

        比如 note 匹配一個n緊接著一個o緊接著一個t緊接著一個e, 而不是匹配單詞"note"。

        二、 基本元素

        1. 普通字符: 除 *, ? , \, (, ), [, ], -, . , +, ^, $, {, } , 以外的字符匹配它自身, 比如 a 匹配 a

        2. 點號 . : 匹配任意不包括換行符的單個字符。比如, sa. 可匹配 sat, sa*, sa[ 等。

        3. 字符組[characters] :匹配字符組中指定字符集合中的任意單個字符: 比如 [abc] 將匹配 a 或 b 或 c , ca[ptb] 將匹配 cap, cat 或 cab。

        4. 排除性字符組[^characters] : 匹配字符組中指定字符集合之外的任意單個字符:

        比如, [^abc] 將匹配除了 a,b,c 之外的任意單個字符。

        ca[^ptb],將匹配 caX 的文本,除了 cap, cat, cab, 注意,這里是匹配一個非指定的字符,而不是不匹配。

        5. 范圍字符組: [char1-char2] 將匹配從char1 到 char2 之間的任意單個字符(按照ASCII編碼)。

        比如, [a-z] 匹配任意小寫字符; [A-Z] 匹配任意大寫字符 ; [0-9] 匹配任意數字; [a-zA-Z0-9] 匹配任意大小寫字符或數字。

        6. 特殊字符: 凡是在正則式中具有特殊含義的字符,要匹配字符本身(將其作為普通文本)都必須使用反斜線 \ 進行轉義;通常需要轉義的字符有: . + * ? { } [ ] ( ) - \ ^ $。

        比如, 匹配 . 的正則式是 \. , 匹配 \ 的正則式是 \\ , 匹配 ( 的正則式是 \( ;要匹配 (ab) 的正則表達式是 \(ab\) ; 要匹配 a? 的表達式是 a\? ; a? 將匹配空或單個a。

        7. 匹配空白字符:

        \f 換頁 \n 換行 \r 回車 \t 制表符 \v 垂直制表符 \s 匹配任意空白符,包括上述任意一種

        8. 字符類: <==> 等價于

        \d <==> [0-9] 任意單個數字 \D <==> [^0-9] 任意單個的非數字字符

        \w <==> [a-zA-Z0-9_] \W <==> [^a-zA-Z0-9_]

        \s <==> [\f\n\r\t\v ] \S <==> [^\f\n\r\t\v ]

        9. POSIX 字符類: 例如: [:digit:] <==> [0-9] ; [:alpha:] <==> [a-zA-Z] ; [:alnum:] <==> [a-zA-Z0-9]

        具體應用時要再加一層括號,比如 TEST[[:digit:]] 匹配 TEST0 - TEST9。

        三、 匹配元素組合:

        下面 X, Y 都可以是一個子表達式

        1. 順序結構 XY: 匹配 X 后緊跟 Y 的文本,比如 [0-9][a-z] 匹配 數字后跟小寫字母的文本, 7z, 0x 等, 但不匹配 ap, 77。

        2. 多選分支結構X|Y: 匹配 X 或者 Y ,比如 [0-9]|[a-z] 匹配數字或小寫字母,相當于 [0-9a-z]。

        X|Y 是一種多選分支結構,在構造復雜正則表達式中有重要作用。

        3. 匹配量詞:

        匹配一個或多個 X : X+ ; 例如 s/d+ 匹配 s后跟至少一個數字, s9, s34, s235, ...

        匹配零個或多個 X : X* ; 例如 s/d* 匹配 s后跟空或者至少一個數字, s, s9, s34, s235, ...

        匹配零個或一個 X : X? ; 例如 https? 匹配 http 或 https

        匹配恰好 m 個 X : X{m} ; 例如 s/d{4} 匹配 s0000, s1234, 但不匹配 s234, s23445

        匹配至少 m 個 X : X{m,} ; 例如 s/d{2,} 匹配 s12, s123, 但不匹配 s1

        匹配至少 m 個 但不超過 n 個X : X{m,n} ; 例如 s/d{2,4} , 匹配 s12, s123, s1234, 但不匹配 s1, s12345

        4. 子表達式 (X): 將 X 作為一個子表達式,緊鄰的匹配量詞將作用于 X 整體,而不是 X 中的單個字符。

        例如 (s\d){3} 匹配 s1s1s1 ,而不匹配 s111

        5. 貪婪匹配: 默認匹配模式是“貪婪型匹配”,即匹配盡可能多的文本。

        例如, You make me lost.

        正則式 .* 中的 .* 將 從 Y 前面的空格一直匹配到末尾的換行符之前,而不會在第一個停下來。

        6. 位置匹配:

        [1] \b 單詞邊界 \B 非單詞邊界。

        文本: The captain wore his cap and cape proudly as he sat listening to the recap of how his crew saved the men from a capsized vessel.

        正則式: cap ; \bcap ; cap\b ;\bcap\b ;\Bcap ;cap\B ; \Bcap\B

        [2] ^ 匹配文本起始 $ 匹配文本末尾

        例如 ^[a-z]123 將匹配以小寫字母開頭后跟123的文本。匹配文本 a123 而不是 slh a123 。

        [a-z]123$ 將匹配以小寫字母后跟123結尾的文本。匹配文本 sss d123 而不是 sdf123dss 。

        7. 捕獲功能: 使用括號將一個子表達式匹配的文本進行捕獲,后面可在模式或處理中對捕獲的文本進行引用或處理。

        ((regex1)-(regex2))-(regex3) \n 引用被捕獲的第 n 個文本; n 按左括號出現的順序進行標識\0 表示匹配的整個文本 \1 ref= ((regex1)-(regex2)) ; \2 ref= (regex1) ; \3 ref= (regex2) ; \4 ref= (regex3)

        在替換文本時可以使用 $1, $2, $3, $4 分別引用 \1, \2, \3, \4 捕獲的文本。

        比如, (\d{3}) mygod(\1) 必須匹配 三位數字mygod三位數字 的模式, 并且,后面三位數字必須與前面三位數字完全相同。

        8. 回溯引用: 相同匹配的概念, 匹配在多處出現的相同文本。

        比如要匹配<h1>hello</h1>中的<h1>...</h1>,使用正則式 <([Hh][1-6])>.*?<\1> ,

        這里, \1 可以捕獲 ([hH][1-6]) 所得到的結果,從而起到對應的效果,以免匹配到23的不合 法文本。

        文本:

        <h1>HELLO WORLD</h1>

        <h2>WA O</h2>

        <h3>YEAH</h3>

        正則式: <[Hh][1-6]>.*? </[Hh][1-6]><([Hh][1-6])>.*?<\1>

        9. 前后查找: 更靈活的位置匹配

        (?=right-regex) : 表示右邊字符序列匹配 right-regex 的位置; (?<=left-regex) : 表示左邊字符序列匹配 left-regex 的位置。

        (?!right-regex): 表示右邊字符序列不匹配 right-regex 的位置; (?<=!left-regex) : 表示左邊字符序列不匹配 left-regex 的位置。

        比如: 要匹配 scatter locate rocate 中 后面緊鄰 e 的 cat,使用 cat(?=e), 注意,這里并不會捕獲e,而是用e作為捕獲 cat 的定位信息。

        要匹配前面是 s 的cat, 使用 (?<=s)cat; 同樣,這里并不會捕獲s,而是將 s 作為捕獲 cat 的定位信息。

        正則式: ((https?)|(ftp))(?=:)

        10. 條件匹配: 當滿足某種條件時,才匹配某個模式。

        ?(back-ref)true-regex 表示,只有當 back-ref 存在時,才會匹配 true-regex;

        ?(back-ref)true-regex|false-regex 表示,若 back-ref 存在,匹配 true-regex; 若不存在,匹配 false-regex。

        例如,要匹配 (123)456-7890 或 123-456-7890 ,而不匹配 (123)-456-7890, 123456-7890,(123-456-7890 等。

        這意味著,若123 由括號括住,則不跟 - ; 否則后面緊跟 - ; 正則表達式是: (\()?\d{3}(?(1)\)|-)\d{3}-\d{4}(\()? 表示是否存在 ( , 這里用括號將 ( 作為子表達式,以便于后面回溯引用;

        (?(1)\)|-) 表示,如果存在 ( ,則匹配 ) ,否則匹配 -

        文本: (123)456-7890 123-456-7890 (123)-456-7890 123456-7890 (123-456-7890

        正則式: \(?\d{3}\)?-?\d{3}-\d{4} (\()?\d{3}(?(1)\)|-)\d{3}-\d{4}

        四、小結

        以上所述就是構造正則表達式的基本知識。編寫正則表達式的一個技巧是分而治之、逐步求精,先劃分成若干子表達式分別調試成功,再組合起來。要掌握這樣一個強大的文本工具,惟有勤加練習,勤于思考求精耳。

        感謝大家閱讀由java教程欄目分享的“Java正則表達式基礎知識--5個學習步驟”希望對大家有所幫助,更多精彩內容請關注Java培訓官網

        免責聲明:本文由小編轉載自網絡,旨在分享提供閱讀,版權歸原作者所有,如有侵權請聯系我們進行刪除

        預約申請免費試聽課

        填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

        上一篇:干貨|JavaIO框架分析
        下一篇:初學Java應該掌握哪些基礎知識?
        12大要點讓你的Java開發所向披靡~

        12大要點讓你的Java開發所向披靡~

        學習Java最好的12本免費在線電子書

        學習Java最好的12本免費在線電子書

        Java常用日志框架介紹

        Java常用日志框架介紹

        一篇文章了解RPC框架原理

        一篇文章了解RPC框架原理

        • 掃碼領取資料

          回復關鍵字:視頻資料

          免費領取 達內課程視頻學習資料

        • 視頻學習QQ群

          添加QQ群:1143617948

          免費領取達內課程視頻學習資料

        Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

        選擇城市和中心
        貴州省

        福建省

        • 達內廈門軟件園中心
        廣西省

        海南省

        国产高清情侣视频2019年,限制电影福利在线观看,23伊人大香蕉 百度 好搜 搜狗
        <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>