正则表达式入门
正则表达式(Regular Expression,简称 regex 或 regexp)是用于匹配字符串中字符模式的强大工具。它广泛应用于文本搜索、替换和验证等领域。以下是正则表达式的入门指南,帮助你从零开始理解并应用这一强大的工具。
1. 基本概念
普通字符:在正则表达式中,普通字符如字母和数字直接代表它们自身,用来匹配相同的字符。
元字符:这些是有特殊含义的字符,比如
.、*、+等,它们定义了更复杂的匹配规则。- \d:匹配任何一个十进制数字字符,等价于
[0-9]。 - \D:匹配任何一个非数字字符,等价于
[^0-9]。 - \w:匹配任何单词字符(word character),包括字母、数字以及下划线
_。等价于[A-Za-z0-9_]。 - \W:匹配任何非单词字符,即
\w的补集。等价于[^A-Za-z0-9_]。 - \s:匹配任何空白字符,如空格
' '、制表符\t、换行符\n等。 - \S:匹配任何非空白字符,即
\s的补集。
- \d:匹配任何一个十进制数字字符,等价于
使用示例
- 若要查找文本中的所有电话号码格式如 "123-456-7890",可以使用正则表达式:
\d{3}-\d{3}-\d{4}。 - 查找以数字开头的行:
^\d.*,这里^表示行的开始,\d表示一个数字,.*表示该行剩下的任意数量的任意字符。 - 若想要找到不包含任何数字的单词,可以使用:
\b\w*[^\d]\w*\b,其中\b表示单词边界,\w*表示任意数量的单词字符,[^\d]确保至少有一个非数字字符。
2. 简单匹配
- 字符匹配:例如,正则表达式
abc将精确匹配字符串 "abc" 中的每一个字符。 - 点号
.:可以匹配除了换行符之外的任何单个字符。例如,a.c可以匹配 "abc", "a1c", "a#c" 等等,但不能匹配 "ac" 或 "a\nb"。
3. 字符类
- 方括号
[]:定义一个字符集合,匹配其中任何一个字符。例如[abc]可以匹配 "a", "b", 或 "c" 中的任何一个。 - 排除符号
^:如果放在方括号内开头,表示不匹配该字符集中的字符。如[^abc]匹配除了 "a", "b", "c" 外的任意字符。 - 范围
[a-z]:匹配指定范围内的任意字符。例如[a-z]匹配所有小写字母。
4. 量词
*星号:匹配前面的子表达式零次或多次。例如a*匹配 "", "a", "aa", "aaa"...。+加号:匹配前面的子表达式一次或多次。例如a+匹配 "a", "aa", "aaa"...但不匹配 ""。?问号:匹配前面的子表达式零次或一次。例如a?匹配 "" 或 "a"。{n}:匹配前面的子表达式恰好 n 次。例如a{3}匹配 "aaa"。{n,}:匹配前面的子表达式至少 n 次。例如a{2,}匹配 "aa", "aaa", ...{n,m}:匹配前面的子表达式至少 n 次,最多 m 次。例如a{2,4}匹配 "aa", "aaa", "aaaa"。
5. 边界匹配器
^脱字符:匹配输入字符串的开始位置。例如^a匹配以 "a" 开始的字符串。$美元符号:匹配输入字符串的结束位置。例如a$匹配以 "a" 结束的字符串。
实践示例
假设你想找到一个包含数字的电话号码,可以使用这样的正则表达式:\d{3}-\d{3}-\d{4}。这里 \d 表示一个数字字符,而 {3} 和 {4} 分别指定了需要匹配的具体数量。因此,这个表达式会匹配类似于 "123-456-7890" 的字符串。
通过以上内容的学习,你已经对正则表达式有了基本的理解。接下来,可以通过编写简单的正则表达式来练习,逐步提高你的技能。记住,实践是掌握正则表达式的关键。随着经验的积累,你可以探索更多高级功能,如分组、反向引用、前瞻与后顾等。