全网最易懂的正则表达式教程(4)- 范围

简介: 全网最易懂的正则表达式教程(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} 是否匹配了
相关文章
|
4月前
|
Ruby
|
6月前
|
应用服务中间件 nginx
Nginx系列教程(07) - Location正则表达式
Nginx系列教程(07) - Location正则表达式
65 0
|
2月前
|
Windows Perl
Perl 教程 之 Perl 正则表达式 8
Perl的正则表达式是其强项,常用于字符串匹配、查找、替换等。基本操作包括:`.`匹配任意字符(除换行符),`x?`匹配0或1次`x`,`x*`匹配0或多次`x`,`x+`匹配1或多次`x`。还有范围匹配如`[0-9]`、否定匹配`[^a-z]`、边界匹配`\b`等。特殊序列如`\d`代表数字,`\s`代表空格,`()`用于记忆匹配内容,`/pattern/i`忽略大小写。
10 0
|
2月前
|
Perl
Perl 教程 之 Perl 正则表达式 7
Perl教程讲解了其强大的正则表达式功能,用于字符串匹配、查找、替换和提取。示例展示如何使用`/s`删除变量`$string`中的重复字符,输出结果为原字符串。其他实例包括将非数字字符替换为空格,删除tab和空格,以及将数字间字符替换为单个空格。
15 3
|
2月前
|
Perl
Perl 教程 之 Perl 正则表达式 6
**Perl正则表达式强大多能,常用于字符串匹配、替换和提取。转化操作符如`tr`用于字符转换,如将所有小写字母转大写:`$string =~ tr/a-z/A-Z/`。**
17 2
|
2月前
|
Perl
Perl 教程 之 Perl 正则表达式 4
简洁概括:Perl正则表达式强大,s///操作符用于字符串替换,例子展示替换"google"为"baidu"。
12 1
|
2月前
|
存储 算法 Shell
【Shell 命令集合 文档编辑】Linux 正则表达式匹配 egrep命令使用教程
【Shell 命令集合 文档编辑】Linux 正则表达式匹配 egrep命令使用教程
12 0
|
2月前
|
Perl
Perl 教程 之 Perl 正则表达式 1
Perl教程介绍了其强大的正则表达式功能,用于字符串匹配、替换和转化。匹配用m//(可简写为//),替换用s///,转化用tr///,常与=~或!~配合判断匹配与否。示例展示了m//在匹配字符串中的应用。
12 0
|
4月前
|
Ruby
|
4月前
|
Ruby