正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它使用特定的模式来匹配、查找、替换或分割文本。正则表达式可以用于各种文本处理任务,如数据清洗、文本搜索、日志分析等。
一、正则表达式的语法
正则表达式的语法由一系列元字符、字符类、量词和转义序列组成。下面是一些常用的元字符和字符类:
-
元字符:
.:匹配任意单个字符(除了换行符)。^:匹配字符串的开头。$:匹配字符串的结尾。*:匹配前面的子表达式零次或多次。+:匹配前面的子表达式一次或多次。?:匹配前面的子表达式零次或一次。{n}:n是一个正整数。匹配确定的n次。{n,}:n是一个正整数。匹配至少n次。{n,m}:m和n均为正整数。匹配至少n次且最多m次。
-
字符类:
[abc]:匹配方括号内的任意一个字符。[^abc]:匹配不在方括号内的任意一个字符。[a-z]:匹配任意小写字母。[A-Z]:匹配任意大写字母。[0-9]:匹配任意数字。
-
量词:
*:匹配前面的子表达式零次或多次。+:匹配前面的子表达式一次或多次。?:匹配前面的子表达式零次或一次。{n}:n是一个正整数。匹配确定的n次。{n,}:n是一个正整数。匹配至少n次。{n,m}:m和n均为正整数。匹配至少n次且最多m次。
-
转义序列:
\d:匹配任意数字字符。等价于[0-9]。\D:匹配任意非数字字符。等价于[^0-9]。\s:匹配任意空白字符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v]。\S:匹配任意非空白字符。等价于[^\f\n\r\t\v]。\w:匹配任意字母、数字或下划线字符。等价于[A-Za-z0-9_]。\W:匹配任意非字母、数字或下划线字符。等价于[^A-Za-z0-9_]。
-
边界符:
^:匹配输入字符串的开始位置。如果模式出现在正则表达式中,它总是表示字面上的“^”字符。$:匹配输入字符串的结束位置。如果模式出现在正则表达式中,它总是表示字面上的“$”字符。
-
选择符:
|:或者的意思,在正则表达式中,它用于在两个或多个模式之间选择一个模式。例如,“acd|b”将匹配“acd”或“b”。这个符号通常也用于扩展“. ”(“.”表示任何单个字符,“ ”表示任何数量包括零),如“. | 1”等价于“.[0-9] ”。即,它会匹配任何以一个非零数字开始的字符串(因为.不能是“0”,而“[0-9] ”将简单地捕获剩余的所有数字)。但请注意,“.”和“|”都是元字符,所以需要使用反斜杠进行转义,如“.|1”。
-
括号分组(Parentheses Grouping):括号在正则表达式中用于组合模式,以便可以应用量词于整个组,而不是组内的单个字符。“(ab)”将匹配“ab”,而“a(b)”将只匹配“b”。括号也用于创建选择(即,“or”)关系,如“(ab)|(cd)”将匹配“ab”或“cd”。括号还允许我们创建子模式,并记住与该模式匹配的字符串的信息(即回溯引用)。回溯引用在正则表达式中非常有用,它们允许我们引用前面模式中的捕获组,例如