正则表达式基础
基本概念
语言组成部分
- 文字(literal)
- 视为普通文本(normal text characters)。
- 元字符(metacharacters)
- 具有特殊含意的特殊字符(special characters)。
转义
元字符可以通过\
转为普通文字处理,但转义符号在字符组内是无效的。
常用元字符
一行的开始与结束
^
开始、$
结束。匹配的是位置,而不是字符。
字符数组(Character Classes)
字符数组的格式
使用结构体:[aeiou]
连字符表示范围
-
连字符(
-
)表示范围:[0-9]
-
连字符(
-
)只有在字符组内才作为元字符处理,其他地情况下只作为普通字符。 -
连字符(
-
)在字符组的开头位置也作为普通字符处理:[-aeiou]
-
转义符(
\
)号在字符组内作为普通字符处理。
问号和点号是普通字符
问号(?
)和点号(.
)是元字符,但是在字符组中是作为普通字符处理:[0-9A-Z_!.?]
排除字符
-
排除符号(
^
)在字符组的开头位置时,表示整个字符数组为排除逻辑。 -
排除符号(
^
)匹配的是「字符」而不是「位置」。因为字符组就表示占一个位置。 表示这个地方一定要有一个字符,而且不能是被排除的字符。
匹配任意字符
-
点号
.
匹配任意字符,相当于占一个位置。 - 如果在字符组内部则不当作元字符,而是普通字符处理。
多选分支结构
-
或符号(
|
)表示分支结构:grey|gray
相当于gr(a|e)y
相当于gr[ea]y
-
在字符组内部视为普通字符:
gr[a|e]y
- 多选分支结构「没有」像字符数组那样的排除功能。
忽略大小写
通常不由正则表达式语法提供,而是由程序指定。
单词分隔符
-
开始(
\<
)和结束(\>
) - 匹配的是「位置」而不是「字符」。
- 不同实现对单词分隔的定义不同,一般是把连续的字符和数字作为一个单词。 也不是所有的实现都带有分隔单词的功能。
重复与计数
-
区间量词(interval quantifier)
{min,max}
-
量词(quantifiers)可选项
?
相当于:{0,1}
-
量词
*
相当于:{0,}
-
量词
+
相当于:{1,}
反向引用
先匹配一个模式,再检查后面有没有出现同样的内容。
支持反向引用的工具可以记住括号匹配的内容,并按左括号((
)出现的顺序标记为:
\1
、\2
、\3
、\4
……
例:
([a-z]) ([0-9]) \1 \2