java正則詳解


一、正則表達式簡介

• 為什么需要正則表達式?
       – 文本的復雜處理。
• 正則表達式的優勢和用途?
       – 一種強大而靈活的文本處理工具;
       – 大部分編程語言 、數據庫、文本編輯器、開發環境都支持正則表達式。
• 正則表達式定義:
      – 正如他的名字一樣是描述了一個規則,通過這個規則可以匹配一類字符串。
      – 學習正則表達式很大程度上就是學習正則表達式的語法規則。

二、開發中使用

• 開發中使用正則表達式的流程:
  – 分析所要匹配的數據,寫出測試用的典型數據
  – 在工具軟件中進行匹配測試
  – 在程序中調用通過測試的正則表達式
 

三、正則語法

• 普通字符
  – 字母、數字、漢字、下划線、以及沒有特殊定義的標點符
號,都是“普通字符”
。 表達式中的普通字符,在匹配一
      個字符串的時候,匹配與之相同的一個字符。
• 簡單的轉義字符

  \n 代表換行符
  \t 制表符
  \\ 代表\本身
  \^ ,\$,\.,\(, \) , \{, \} , \? , \+ , \* ,
  \| ,\[, \]

  

• 標准字符集合:
  – 能夠與 ‘多種字符’ 匹配的表達式
  – 注意區分大小寫,大寫是相反的意思

  \d 任意一個數字,0~9 中的任意一個
  \w 任意一個字母或數字或下划線,也就是 A~Z,a~z,0~9,_ 中任意一個
  \s 包括空格、制表符、換行符等空白字符的其中任意一個
  . 小數點可以匹配任意一個字符(除了換行符)
  如果要匹配包括“\n”在內的所有字符,一般用[\s\S]

 

• 自定義字符集合:
  – [ ]方括號匹配方式,能夠匹配方括號中任意一個字符
  – 正則表達式的特殊符號,被包含到中括號中,則失去特殊意義,除了
  ^
  ,-之外。
  – 標准字符集合,除小數點外,如果被包含於中括號,自定義字符集合
將包含該集合。比如:
  • [\d.\-+]將匹配:數字、小數點、+、-
  [ab5@] 匹配 "a" 或 "b" 或 "5" 或 "@"
  [^ abc] 匹配 "a","b","c" 之外的任意一個字符
  [f-k] 匹配 "f"~"k" 之間的任意一個字母
  [^A-F0-3] 匹配 "A"~"F","0"~"3" 之外的任意一個字符

 

量詞(Quantifier)


  – 修飾匹配次數的特殊符號
• 匹配次數中的貪婪模式(匹配字符越多越好,默認!)
• 匹配次數中的非貪婪模式(匹配字符越少越好,修飾匹配次數
的特殊符號后再加上一個 "?" 號)
  {n} 表達式重復n次
  {m,n} 表達式至少重復m次,最多重復n次
  {m,} 表達式至少重復m次
  ? 匹配表達式0次或者1次,相當於 {0,1}
  + 表達式至少出現1次,相當於 {1,}
  * 表達式不出現或出現任意次,相當於 {0,}• 字符邊界
  – (本組標記匹配的不是字符而是位置,符合某種條件的位置)
  – \b匹配這樣一個位置:前面的字符和后面的字符不全是\w
  ^ 與字符串開始的地方匹配
  $ 與字符串結束的地方匹配
  \b 匹配一個單詞邊界• IGNORECASE 忽略大小寫模式
  – 匹配時忽略大小寫。
  – 默認情況下,正則表達式是要區分大小寫的。
• SINGLELINE 單行模式
  – 整個文本看作一個字符串,只有一個開頭,一個結尾。
  – 使小數點 "." 可以匹配包含換行符(\n)在內的任意字符。
• MULTILINE 多行模式
  – 每行都是一個字符串,都有開頭和結尾。
  – 在指定了 MULTILINE 之后,如果需要僅匹配字符串開始和結束位置,可以使
用 \A 和 \Z

 

 

選擇符和分組
• 反向引用(\nnn)
  – 每一對()會分配一個編號,使用 () 的捕獲根據左括號的順序從 1 開始自動編號。
  – 通過反向引用,可以對分組已捕獲的字符串進行引用。
表達式 作用
|
分支結構
左右兩邊表達式之間 "或" 關系,匹配左邊或者右邊
( )
捕獲組
  (1). 在被修飾匹配次數的時候,括號中的表達式可以作為整體被修飾
  (2). 取匹配結果的時候,括號中的表達式匹配到的內容可以被單獨得到
  (3). 每一對括號會分配一個編號,使用 () 的捕獲根據左括號的順序從 1
開始自動編號。捕獲元素編號為零的第一個捕獲是由整個正則表達式模式
匹配的文本
  (?:Expression)
非捕獲組 一些表達式中,不得不使用( ),但又不需要保存( )中子表達式匹
配的內容,這時可以用非捕獲組來抵消使用( )帶來的副作用。

 

預搜索(零寬斷言) – 只進行子表達式的匹配,匹配內容不計入最終的匹配結果,是零寬度
  – 這個位置應該符合某個條件。判斷當前位置的前后字符,是否符合指
定的條件,但不匹配前后的字符。是對位置的匹配。
  – 正則表達式匹配過程中,如果子表達式匹配到的是字符內容,而非位置,並被
保存到最終的匹配結果中,那么就認為這個子表達式是占有字符的;如果子表
達式匹配的僅僅是位置,或者匹配的內容並不保存到最終的匹配結果中,那么
就認為這個子表達式是零寬度的。占有字符還是零寬度,是針對匹配的內容是
否保存到最終的匹配結果中而言的。
(?=exp) 斷言自身出現的位置的后面能匹配表達式exp
(?<=exp) 斷言自身出現的位置的前面能匹配表達式exp
(?!exp) 斷言此位置的后面不能匹配表達式exp
(?<!exp) 斷言此位置的前面不能匹配表達式exp

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM