全網最易懂的正則表達式教程(4)- 范圍


正則詳細教程系列可以看此鏈接的文章哦

https://www.cnblogs.com/poloyy/category/1796055.html

 

范圍

代碼/語法 說明
分支條件,或
[...] 字符集合,多選一
[a-z] 指定范圍的字符集合
[^...] 取反的字符集合

  

[...] 字符集合介紹

背景

要想匹配數字,字母,空白是很簡單的,因為已經有了對應這些字符集合的元字符,但是如果你想匹配沒有預定義元字符的字符集合(比如:元音字母 a,e,i,o,u )

 

解決方案 

很簡單,你只需要在方括號 [ ]  里列出它們就行了,像 [aeiou] 匹配任何一個英文元音字母, [.?!] 匹配任一個標點符號

 

重點

 [...]  里面寫再多的字符集合,最終也只會匹配一個字符,和元字符一樣,如果需要重復匹配需要加上限定符

 

元字符等價的字符集合

元字符 等價語法
\w [a-zA-Z0-9_] 
\W [^a-zA-Z0-9_] 
\s [\n\t\r\f] 
\S [^\n\t\r\f] 
\d [0-9]
\D [^0-9]

  

[...] 的栗子一

正則表達式

 \(?0\d{2}[) -]?\d{8} 

分析:

  1. 首先是一個轉義字符  \(  ,它能出現 0 次或 1 次  ? 
  2. 然后是一個 0,后面跟着2個數字 \d{2}
  3. 然后是 ) 或 - 或空格中的一個,它出現 0 次或 1 次  ? 
  4. 最后是 8 個數字 \d{8}

 

可匹配到的字符串

  • (010)88886666
  • 022-22334455
  • 02912345678

 

[...] 的栗子二

正則表達式

[123aA;] 

 

可匹配到的字符串

只能匹配 [ ] 里面的字符

 

指定范圍的 [...] 的栗子一

正則表達式

 [\u4e00-\u9fa5]

 

可匹配到的字符串

任意中文字符

 

指定范圍的 [...] 的栗子二

正則表達式

 ^\d[a-gA-Z5-9]{2,4} 

分析:

  1. 數字開頭
  2. a-g 或 A-Z 或 5-9 任取2-4位
  3. 表達式可以等價成: ^[0-9][a-gA-Z5-9]{2,4} 

 

可匹配到的字符串

  • 6aY
  • 6aY7
  • 6aY78

 

[^...] 的栗子

正則表達式

 [^abcdA-Z()-=]

分析:

可以匹配非 a、b、c、d、A-Z、( 、) 、- 、= 以外的字符

 

可匹配到的字符串

  • e
  • f
  • \
  • [

 

指定范圍的 [...] 總結

  •  [a-z] 如果是有指定范圍字符集的話,必須按照 ASCII 碼的順序
  •  [...] 只能匹配一個字符,除非加了量詞(限定符)

 

| 分支條件的栗子一

正則表達式

 ab|cd|123|.{2} 

 

可匹配到的字符串

  • ab
  • cd
  • 123
  • 菠蘿

 

| 分支條件的栗子二

正則表達式

 0\d{2}-\d{8}|0\d{3}-\d{7} 

 

可匹配到的字符串

  • 012-81200111
  • 0333-8120011

 

| 分支條件的栗子三

兩個正則表達式的區別

 \d{5}-\d{4}|\d{5} :可以匹配 5 位數字 或 5位數字 - 4位數字

 \d{5}|\d{5}-\d{4} :只能匹配 5 位數字

 

是否有個疑問

明明表達式差不多一樣啊,只是前后位置換了下而已,為啥第二種寫法只能匹配 5 位數字呢?

 

答案

  • 因為第二種寫法,如果滿足 \d{5}-\d{4} ,那肯定也滿足 \d{5} 
  • 匹配分支條件時,將會從左到右地測試每個條件,如果滿足了某個分支條件的話,就不會再去匹配后面的分支了
  • 所以\d{5}能匹配上,就不再去測試 \d{5}-\d{4} 是否匹配了

 

 


免責聲明!

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



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