正则表达式是一种用于描述字符排列和匹配模式语法规则的表达式,它可以用来匹配、查找、替换字符串。正则表达式的内容包括以下几个主要部分:
- 字面量字符:包括字母、数字、标点符号等,表示自身的字符。
- 特殊字符:具有特殊含义的字符,如
.
、*
、+
等。 - 字符集合:用方括号
[ ]
包围的一组字符,表示匹配其中的任意一个字符。 - 量词:用来指定匹配次数的字符,如
*
表示零次或多次,+
表示一次或多次,?
表示零次或一次。 - 边界匹配:用来匹配字符串的开头或结尾,如
^
表示字符串的开头,$
表示字符串的结尾。 - 分组和捕获:使用小括号
( )
进行分组,并且可以在匹配之后捕获匹配到的内容。 - 转义字符:用来匹配特殊字符本身的字符,如
\
可以转义特殊字符。
除了上述内容外,正则表达式还涉及到各种元字符、修饰符、断言等概念,这些内容共同构成了正则表达式的语法和功能。通过合理地组合这些内容,可以构建出丰富和灵活的字符串匹配规则。
元字符有以下:
-
. 匹配除了换行符以外的任意字符。
-
\s 代表任意空白符(换行符,制表符,空格)
-
\S 匹配任意非空字符串
-
\b 匹配单词边界,匹配单词的开头和结尾。
-
\B 匹配一个非单词边界
-
\d 匹配一个数字,等价于[0-9]
-
\D 匹配一个数字,等价于[^0-9]
-
\w 匹配一个单字字符(字母、数字或者下划线)等价于[A-Za-z0-9]
-
\W 匹配一个非单字字符。等价于[^A-Za-z0-9]
量词有以下:
- * 匹配任意次,.*连在一起就意味着任意数量的不包含换行的字符。等价于{0,}
- + 匹配前面一个表达式1次或者多次。等价于 {1,}。
- ? 匹配前面一个表达式0次或者1次。等价于 {0,1}。
- {n} 匹配n次
- {n,} 匹配最少n次
- {n,m} 匹配n到m次
- x(?=y) 匹配'x'仅仅当'x'后面跟着'y'.这种叫做正向肯定查找
- x(?!y) 匹配'x'仅仅当'x'后面不跟着'y',这个叫做正向否定查找
方括号:查找某个范围内的字符
- [abc]查找方括号之间的任何字符。
- [^abc]查找任何不在方括号之间的字符。
- [0-9]查找任何从 0 至 9 的数字。
- [a-z]查找任何从小写 a 到小写 z 的字符。
- [A-Z]查找任何从大写 A 到大写 Z 的字符。
- [A-z]查找任何从大写 A 到小写 z 的字符。
- [adgk]查找给定集合内的任何字符。
- [^adgk]查找给定集合外的任何字符。
- (red|blue|green)查找任何指定的选项。
修饰符
常见用法为:
i
:不区分大小写地匹配字符。g
:全局匹配,即匹配所有符合条件的字符串,而不仅限于第一个符合条件的字符串。m
:多行模式,即在多行文本中匹配每一行的开头和结尾,而不是整个文本的开头和结尾。s
:单行模式,即将整个文本视为一行,使点号.
匹配包括换行符在内的任意字符。u
:启用 Unicode 模式,使正则表达式支持 Unicode 字符集。y
:粘附匹配模式,即从上一次匹配结束的位置开始匹配