a级毛片免费全部播放-a级毛片免费观看在线播放-a级毛片免费观看网站-a级毛片免费看-国产成人精品在视频-国产成人精品在线

歡迎來到培訓無憂網!

全國切換

咨詢熱線 400-001-5729

位置:培訓無憂網 > 新聞資訊 > 電腦/IT > java培訓 >  Java正則表達式基礎知識學習

Java正則表達式基礎知識學習

來源:培訓無憂網 發布人:云朵

2022-01-21 10:52:41|已瀏覽:426次

Java正則表達式基礎知識學習

一、 概述

      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}

      注:尊重原創文章,轉載請注明出處和鏈接 http://m.dedgn.cn/news-id-17233.html 違者必究!部分文章來源于網絡由培訓無憂網編輯部人員整理發布,內容真實性請自行核實或聯系我們,了解更多相關資訊請關注java培訓頻道查看更多,了解相關專業課程信息您可在線咨詢也可免費申請試課。關注官方微信了解更多:150 3333 6050

留下你的信息,課程顧問老師會一對一幫助你規劃更適合你的專業課程!
  • 姓名:

  • 手機:

  • 地區:

  • 想學什么:

  • 培訓無憂網
免 費 申 請 試 聽
提交申請,《培訓無憂網》課程顧問老師會一對一幫助你規劃更適合你的專業課程!

主站蜘蛛池模板: 国产亚洲福利精品一区二区 | 久久不见久久见免费影院 | 国产一区二区三区久久精品小说 | 91久久精品青青草原伊人 | 国内自拍区 | 欧美精品在线一区二区三区 | 日韩有码第一页 | 日本久久一区二区 | 欧美一级片网站 | 亚洲精品99久久一区二区三区 | 99精品免费 | 国产高清精品在线 | 日本三级韩国三级在线观看a级 | 一级毛片欧美大片 | 亚洲综合第一欧美日韩中文 | 国产主播大尺度精品福利 | 一区二区三区在线免费视频 | 欧美xxxx精品另类 | 日本黄色大片免费观看 | 免费一区二区三区在线视频 | 国产一区二区在线不卡 | 日本一级高清不卡视频在线 | 成人免费视频播放 | 99视频精品全部 在线 | 伊人久久青草青青综合 | 玖玖色视频| 国产男女乱淫真视频全程播放 | 九九99| 一级片免费观看 | 久久精品视频在线 | 欧美牲 | 中文字幕在线观看一区二区三区 | 免费a级毛片视频 | 18性欧美69 | 在线aaa | 成人av手机在线观看 | 国产粗大猛烈18p | 国产一区二区三区在线视频 | xxx欧美老熟 | 99久久精品久久久久久清纯 | 亚洲看黄 |