正则表达式(Regular Expression,又称RegEx)是一种 文本模式,用于匹配一系列符合某个语法规则的字符串,应用于文本搜索、替换和提取。正则表达式是一种用于描述文本模式的规则语言。其在文本处理、数据抽取、数据清洗等方面有着广泛的应用。
语法
正则表达式由字符和操作符构成,用于描述一组符合某种特定规则的字符串。
常用的操作符包括:
-
字符匹配:普通字符表示该字符必须出现在目标字符串中;
-
元字符:用于表示一定类型的字符,如 \d 表示任意数字字符;
-
重复:用于表示该字符或元字符出现的次数,如 * 表示前一个字符或元字符可以出现零次或多次;
-
分组:用于将多个字符或元字符组合在一起;
-
转义字符:用于表示特殊字符,如 \n 表示换行符。
常用元字符:
- \d:匹配任意一个数字字符(0-9)
- \D:匹配任意一个非数字字符
- \w:匹配任意一个字母、数字或下划线
- \W:匹配任意一个非字母、数字或下划线字符
- \s:匹配任意一个空白字符(包括空格、制表符、换行符等)
- \S:匹配任意一个非空白字符
- [ ]:匹配其中的任意一个字符,如[abc]表示匹配a、b或c中的任意一个字符
- [^]:不匹配其中的任意一个字符,如[^abc]表示不匹配a、b或c中的任何一个字符
大写 和 ‘^’ 匹配补集
- . :匹配除换行符外的任意一个字符
- *:匹配前一个字符0次或多次,如a*表示匹配任意个a字符(包括0个)
- +:匹配前一个字符1次或多次,如a+表示匹配至少一个a字符
- ?:匹配前一个字符0次或1次,如a?表示匹配0个或1个a字符
- {m,n}:匹配前一个字符至少m次,至多n次,如a{2,4}表示匹配2~4个a字符
- ( ):创建一个子组,可以在后面的表达式中使用该组匹配到的内
模式
pattern 为要匹配的正则表达式
pattern = [...] 如下:
[待匹配的字符]
//普通可输出字符
[aBc] 匹配所有的'a','B','c'
[a-z]
[A-Z]
[^a-z]
[0-9]
[^A-Z0-9]
//其他可输出字符
[.]
[\s\S]
[\w]
//非打印字符
word\n //匹配以word开头,有一个换行符结尾的字符串
word\r //匹配以word开头,有一个回车符结尾的字符串
word\t //匹配以word开头,有一个制表符结尾的字符串
word\a //匹配以word开头,有一个警告符结尾的字符串
worf\v //匹配以word开头,有一个垂直制表符结尾的字符串
word\f //匹配以word开头,有一个换页符结尾的字符串
//特殊字符(\\ , \( , \} , \[ , \^等等用转义字符匹配)
{} //{匹配的次数}:{k}匹配k次
. //匹配除了换行符之外的任意单个字符
* //匹配前面的字符出现0次或多次
+ //匹配前面的字符出现1次或多次
? //匹配前面的字符出现零次或一次
() //
eg.
Hello.world 匹配以 Hello 开头,后接任意一个字符,然后再是 World 的字符串
Helloo*World 匹配以 Hello 开头,后面接任意数量的o,然后是 World 的字符串
(hello){2} 匹配hellohello
//限定符, 即特殊字符的组合,用于限定pattern出现次数等形式
{n, m} //至少匹配n次,最多匹配m次,可缺省其一
{k} //匹配
//定位符
^ //^[]定位pattern开头;[^]范围取反。注意区分
$ //匹配输入字符串结尾的位置
\b //匹配一个字与空格间的位置
\B //非单词边界匹配
注:不能将限定符与定位符一起使用
由于匹配优先级不同,限定符可分为贪婪、非贪婪
- * 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字
- 只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配