正则表达式(Regular Expression,简称Regex)是一种用于描述字符串模式的强大工具。
正则表达式可以用于搜索、替换和验证字符串。
以下是一些常见的正则表达式语法:
字符匹配:
.
:匹配任意单个字符,除了换行符(在某些实现中,可以通过设置标志来匹配换行符)。d
:匹配任意数字字符,等价于[0-9]
。D
:匹配任意非数字字符,等价于[^0-9]
。w
:匹配任意单词字符(字母、数字和下划线),等价于[A-Za-z0-9_]
。W
:匹配任意非单词字符,等价于[^A-Za-z0-9_]
。s
:匹配任意空白字符(空格、制表符、换行符等)。S
:匹配任意非空白字符。
字符集(Character Set):
[...]
:匹配方括号内的任意字符。例如,[abc]
匹配字符a
、b
或c
。[^...]
:匹配不在方括号内的任意字符。例如,[^abc]
匹配除a
、b
和c
以外的任意字符。
量词(Quantifiers):
*
:匹配前面的字符或子表达式0次或多次。例如,ab*c
匹配ac
、abc
、abbc
等。+
:匹配前面的字符或子表达式1次或多次。例如,ab+c
匹配abc
、abbc
等,但不匹配ac
。?
:匹配前面的字符或子表达式0次或1次。例如,ab?c
匹配ac
和abc
。{n}
:匹配前面的字符或子表达式恰好n次。例如,a{3}
匹配aaa
。{n,}
:匹配前面的字符或子表达式至少n次。例如,a{3,}
匹配aaa
、aaaa
等。{n,m}
:匹配前面的字符或子表达式至少n次,但不超过m次。例如,a{2,4}
匹配aa
、aaa
和aaaa
。
定位符(Anchors):
^
:匹配字符串的开头。例如,^abc
匹配以abc
开头的字符串。$
:匹配字符串的结尾。例如,abc$
匹配以abc
结尾的字符串。b
:匹配单词边界。例如,bwordb
匹配字符串中独立的单词word
,而不匹配words
或subword
等。B
:匹配非单词边界。例如,BwordB
只匹配words
或subword
等单词的一部分。
分组(Grouping):
( )
:括号内的表达式作为一个分组,可以应用量词和捕获匹配结果。例如,(ab)+
匹配ab
、abab
等。(?: )
:括号内的表达式作为一个非捕获分组,不捕获匹配结果。例如,(?:ab)+
匹配ab
、abab
等,但不捕获匹配结果。(?= )
:正向预查,在括号内的表达式之前的位置匹配成功,但不包含预查部分。例如,abc(?=def)
匹配字符串abcdef
中的abc
,但不包括def
。(?! )
:负向预查,在括号内的表达式之前的位置匹配失败。例如,abc(?!def)
匹配不在def
前的abc
。
反向引用(Backreferences):
n
:匹配前面第n个分组的捕获结果。例如,(a)b1
匹配字符串aba
。- 标志(Flags):用于修改正则表达式的行为。不同编程语言的正则表达式实现可能有所不同,但以下是一些常见的标志:
i
:忽略大小写。g
:全局搜索,匹配字符串中的所有符合条件的部分,而不仅仅是第一个匹配。m
:多行模式,^
和$
匹配每行的开头和结尾,而不仅仅是整个字符串的开头和结尾。s
:单行模式,.
字符匹配换行符。
这些语法元素可以组合成复杂的正则表达式,以匹配和操作各种字符串模式。
请注意,不同编程语言和正则表达式库可能有一些差异和扩展,因此在实际应用中需要参考具体的文档和实现。