1. 正则表达式基础
正则表达式(Regular Expressions,简称 Regex)是一种用于匹配和处理字符串模式的工具。它们在文本搜索、数据验证、字符串替换等方面具有广泛应用。以下是正则表达式的基础知识,包括概述、基本语法以及常见符号和用法。
1.1 正则表达式概述
定义
- 正则表达式是一种描述字符串模式的语法,用于匹配和操作符合特定规则的字符串。它提供了一种强大的文本处理工具,可以帮助用户查找、提取、替换和验证文本数据。
应用场景
- 搜索与替换:在文本中查找匹配的模式并进行替换。
- 数据验证:检查用户输入是否符合特定格式(如电子邮件地址、电话号码)。
- 信息提取:从文本中提取特定的信息(如从日志文件中提取 IP 地址)。
工具与库
- 在 Go 语言中,正则表达式的处理主要通过
regexp
包来实现。其他编程语言(如 Python、JavaScript、Java)也有类似的正则表达式库。
1.2 正则表达式的基本语法
1. 字符类(Character Classes)
.
:匹配任意单个字符(除了换行符)。- 例如:
a.b
匹配a
后面跟着任意字符再跟着b
,如a1b
或a_b
。
- 例如:
\d
:匹配任意数字,等价于[0-9]
。- 例如:
\d{3}
匹配 3 位数字,如123
。
- 例如:
\D
:匹配任意非数字字符。- 例如:
\D
匹配a
、@
、#
等非数字字符。
- 例如:
\w
:匹配任意字母数字字符及下划线,等价于[a-zA-Z0-9_]
。- 例如:
\w+
匹配一个或多个字母、数字或下划线。
- 例如:
\W
:匹配任意非字母数字字符及下划线。- 例如:
\W
匹配!
、@
、#
等非字母数字字符。
- 例如:
\s
:匹配任意空白字符(如空格、制表符)。- 例如:
\s+
匹配一个或多个空白字符。
- 例如:
\S
:匹配任意非空白字符。- 例如:
\S
匹配a
、1
、_
等非空白字符。
- 例如:
2. 字符集(Character Sets)
[abc]
:匹配字符a
、b
或c
。- 例如:
[a-c]
匹配a
、b
或c
。
- 例如:
[^abc]
:匹配任何不在字符集中的字符。- 例如:
[^a-c]
匹配除a
、b
和c
外的任何字符。
- 例如:
[a-z]
:匹配从a
到z
的任意小写字母。- 例如:
[a-z]
匹配任何小写字母。
- 例如:
[0-9]
:匹配任意数字字符。- 例如:
[0-9]
匹配任何数字字符。
- 例如:
3. 元字符(Metacharacters)
^
:匹配字符串的开头。- 例如:
^Hello
匹配以Hello
开头的字符串。
- 例如:
$
:匹配字符串的结尾。- 例如:
world$
匹配以world
结尾的字符串。
- 例如:
*
:匹配前面的字符零次或多次。- 例如:
a*
匹配零个或多个a
,如aa
、a
或空字符串。
- 例如:
+
:匹配前面的字符一次或多次。- 例如:
a+
匹配一个或多个a
,如a
、aa
。
- 例如:
?
:匹配前面的字符零次或一次,或表示非贪婪匹配。- 例如:
a?
匹配零个或一个a
,如a
或空字符串。
- 例如:
{n}
:匹配前面的字符正好 n 次。- 例如:
a{3}
匹配aaa
。
- 例如:
{n,}
:匹配前面的字符至少 n 次。- 例如:
a{2,}
匹配两个或更多的a
,如aa
、aaa
。
- 例如:
{n,m}
:匹配前面的字符至少 n 次,最多 m 次。- 例如:
a{2,4}
匹配 2 到 4 个a
,如aa
、aaa
、aaaa
。
- 例如:
4. 分组与捕获(Grouping and Capturing)
()
:用于分组匹配,捕获匹配的子串。- 例如:
(ab)+
匹配ab
、abab
、ababab
。
- 例如:
(?:)
:用于分组但不捕获。- 例如:
(?:ab)+
匹配ab
、abab
、ababab
,但不捕获ab
。
- 例如:
\1
,\2
, ...:引用捕获组。- 例如:
(\d)\1
匹配重复的数字,如11
、22
。
- 例如:
5. 选择(Alternation)
a|b
:匹配a
或b
。- 例如:
cat|dog
匹配cat
或dog
。
- 例如:
6. 转义字符(Escaping Characters)
\
:用来转义特殊字符,使其被当作普通字符处理。- 例如:
\.
匹配句点字符.
,\*
匹配星号字符*
。
- 例如:
1.3 常见的正则表达式符号与用法
1. 匹配电子邮件地址
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
- 匹配一个标准的电子邮件地址。
2. 匹配 IP 地址(IPv4)
^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)$
- 匹配一个有效的 IPv4 地址。
3. 匹配电话号码
^\+?[1-9]\d{1,14}$
- 匹配国际电话号码格式(E.164)。
4. 匹配日期(YYYY-MM-DD)
^\d{4}-\d{2}-\d{2}$
- 匹配日期格式如
2024-08-02
。
5. 匹配 URL
https?:\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(\/\S*)?
- 匹配
http
或https
的 URL。
掌握这些正则表达式基础知识可以帮助你在处理文本数据时更加高效和精准。