Skip to content

正则表达式入门

正则表达式(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 的补集。

使用示例

  • 若要查找文本中的所有电话号码格式如 "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" 的字符串。

通过以上内容的学习,你已经对正则表达式有了基本的理解。接下来,可以通过编写简单的正则表达式来练习,逐步提高你的技能。记住,实践是掌握正则表达式的关键。随着经验的积累,你可以探索更多高级功能,如分组、反向引用、前瞻与后顾等。

Released under the MIT License.