Skip to content

正则表达式

正则表达式(Regular Expression,简称 regex 或 regexp)是一种用来匹配字符串的强大工具。它被广泛应用于文本处理、搜索替换、数据验证等领域。下面是从入门到精通所需了解的一些关键知识点:

入门

  1. 基本概念

    • 正则表达式是由普通字符(如字母、数字)以及特殊字符(称为元字符)组成的模式。
  2. 简单匹配

    • 字符匹配:直接使用字符本身来匹配相同的字符。
    • 点号 .:匹配除了换行符之外的任何单个字符。
  3. 字符类

    • [abc]:匹配方括号内的任意一个字符。
    • [^abc]:匹配不在方括号内的任意一个字符。
    • [a-z]:匹配小写字母 a 到 z 之间的任意一个字符。
  4. 量词

    • *:匹配前面的子表达式零次或多次。
    • +:匹配前面的子表达式一次或多次。
    • ?:匹配前面的子表达式零次或一次。
    • {n}:匹配前面的子表达式 n 次。
    • {n,}:匹配前面的子表达式至少 n 次。
    • {n,m}:匹配前面的子表达式至少 n 次,最多 m 次。
  5. 边界匹配器

    • ^:匹配输入字符串的开始位置。
    • $:匹配输入字符串的结束位置。

进阶

  1. 分组和引用

    • ():用于分组,并允许你对分组应用量词等操作。
    • \1, \2...:反向引用,引用前面捕获组中的内容。
  2. 选择

    • |:表示“或”的意思,可以用来匹配多个表达式中的任何一个。
  3. 前瞻与后顾

    • (?=...):正向前瞻,确保接下来的内容符合预期但不消耗字符串。
    • (?!...):负向前瞻,确保接下来的内容不符合预期但不消耗字符串。
    • (?<=...):正向后顾,确保前面的内容符合预期但不消耗字符串。
    • (?<!...):负向后顾,确保前面的内容不符合预期但不消耗字符串。

高级

  1. 非捕获组

    • (?:...):用于分组但是不进行捕获,节省内存和提高效率。
  2. 命名捕获组

    • (?<name>...):为捕获组指定名称,方便后续引用。
  3. 条件匹配

    • (?(id/name)yes-pattern|no-pattern):根据之前是否匹配了某个分组来决定使用哪个模式。

学习正则表达式的最佳方式是通过实践,尝试解决实际问题,并参考文档或教程来加深理解。掌握这些知识点后,你将能够编写复杂而有效的正则表达式。

Released under the MIT License.