全网最易懂的正则表达式教程(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
  • 1aY781

 

[^...] 的栗子

正则表达式

 [^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} 是否匹配了

 

你可能感兴趣的:(全网最易懂的正则表达式教程(4)- 范围)