一、为什么要正则表达式
正则表达式是一种匹配文本模式的工具,它能够帮助我们在处理相关文本时更加高效地搜索、替换和验证等操作,有了它,从大量文本中寻找出我们需要的内容将会更加容易和高效。
二、正则表达式的基本规则
- 不同语言中的表示。 正则表达式在不同编程语言中有着不同的表示,例如在Python中:
r"regular expression"flags
;在EcmaScript中:/regular expression/flags
;在Java中:"regular expression"flags
。 - 修饰符。 在正则表达式中,修饰符
flags
,它定义了一些匹配策略,常见的flags如下:
g
:全局匹配。该策略会查找匹配到的所有项,如果非全局策略的话,只会查找第一个。i
:不区分大小写。该策略下,搜索时不区分大小写,比如A和a都可以匹配。m
:多行匹配。该策略仅在有^
或$
有效,否则的话有无m修饰符都一样;在有^
和$
修饰符时,若文本中有换行符,该策略会对每一行进行匹配查找,否则只会对第一行进行匹配查找,即使有g
修饰符也只会对第一行进行匹配查找。s
:默认情况下,.
字符会匹配除\n
之外的任何字符,要是想让.
也匹配上\n
,则可以使用s
修饰符。
- 表示数量的字符。 在正则表达式中,能够表示数量的字符有如下:
*
:0个或多个,其是贪婪模式,也就是尽可能多的匹配字符,例如"zooo"
,r'zo*'
,其匹配到的是"zooo"
,而不是"zo"
或"zoo"
等。+
:1个或多个,其也是贪婪模式。?
:0个或1个,其也是贪婪模式。{m,n}
:最少m个,最多n个,其也是贪婪模式。{m,}
:最少m个,做多不限,其也是贪婪模式。{m}
:正好m个。
注意: 上面提到的表示数量的大多为贪婪模式,那非贪婪模式怎么设置,也就是尽可能少的匹配字符,在正则表达式中,我们用字符?
进行设置,将?
和放到上面那些字符的后面即可,例如例如"zooo"
,r'zo*?'
,其匹配到的是"zo"
,而不是"zoo"
或"zooo"
等。
- 字符簇 。在正则表达式中,除了数字、字母外常用的字符,我们正常书写即可外,还可以用一些字符簇来表示,这样会变得更加简洁方便:
.
:匹配除换行符\n
外的所有字符。[a-z]
:匹配所有的小写字母;[^a-z]
:匹配小写字母外的所有字符。[A-Z]
:匹配所有的大写字母;[^A-Z]
:匹配大写字母外的所有字符。[a-zA-Z]
:匹配所有的字母;[^a-zA-Z]
:匹配字母外的所有字符。[0-9]
:匹配所有的数字。[^0-9]
:匹配数字外的所有字符。[abcd]
:匹配a/b/c/d中的任一个。
注意: 从上面可以看出,中括号[]
括起来的部分就是字符簇,从类型上来讲,其能够匹配范围内的所有字符,但从数量上讲,其只匹配一个,什么意思呢,比如[0-9]
,其能匹配到0到9中的任何数字,但是其只能匹配0或1或2等等,是无法表示01或者93等等这种。
- 其他。
- 在正则表达式中,我们往往需要表示一个整体,即多个字符构成了一个整体,需要对这个整体进行匹配,这时我们可以用括号
()
将他们放到一起以表示一个整体。 - 有时我们需要匹配以某个或某些字符开头或结尾,这时我们可以用字符
^
表示以什么开头,$
表示以什么结尾。