深入理解正则表达式:语法与应用实例

185 阅读3分钟

深入理解正则表达式:语法与应用实例

正则表达式,是处理字符串的一个重要工具,它的设计思想是用一种描述性的语言来给字符串设定一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。

正则表达式基本语法

正则表达式由两种基本字符类型组成:原义文本字符和元字符。原义文本字符就是普通的字符,例如 a、b、1、2 这些。元字符具有特殊的含义,被用来实现正则表达式的大部分强大功能。

元字符

常见的元字符有以下几种:

  1. .:匹配除换行符以外的任意字符
  2. *:匹配前面的子表达式零次或多次
  3. +:匹配前面的子表达式一次或多次
  4. ?:匹配前面的子表达式零次或一次
  5. {n}:n 是一个非负整数。匹配确定的 n 次
  6. {n,}:n 是一个非负整数。至少匹配n 次
  7. {n,m}:m 和 n 均为非负整数,其中 n <= m。最少匹配 n 次且最多匹配 m 次
  8. [xyz]:字符集合。匹配所包含的任意一个字符
  9. [^xyz]:负值字符集合。匹配未包含的任意字符
  10. \b:匹配一个单词边界,也就是指单词和空格间的位置
  11. \B:非单词边界匹配

字符转义

如果你希望匹配包含元字符的字符串,需要对元字符进行转义,转义字符是 ``。例如,如果你想要匹配 .,你需要写成 .

字符类

字符类使你能够匹配任何你指定的字符。例如,如果你想匹配任何数字,你可以使用 [0123456789],或者更简短的 \d

前瞻和后顾

前瞻和后顾允许你在匹配一个表达式的同时,检查该表达式前面或者后面的内容,但是不包括这些内容。前瞻和后顾通常包括两种类型:肯定的和否定的。肯定前瞻的形式是 (?=...),否定前瞻的形式是 (?!...)

正则表达式常用示例

下面是一些常见的正则表达式示例,可以用于匹配或提取特定格式的字符串:

  1. 电子邮件地址^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$

    这个正则表达式用于匹配电子邮件地址。它首先匹配一个或多个字母、数字或者 .%+- 符号,然后是一个 @ 符号,再接着是一个或多个字母、数字或者 .- 符号,最后是一个 . 和两个或多个字母。

  2. URL^(https?://)?([da-z.-]+).([a-z.]{2,6})([/w .-]*)*/?$

    这个正则表达式用于匹配 URL。它首先匹配 http:// 或 https://,然后是一个或多个字母、数字、. 或 -,然后是一个 .,接着是两个到六个字母,然后是一个可选的 / 和任意数量的字母、数字、空格、. 或 -,最后是一个可选的 /

  3. 日期(yyyy-mm-dd)^([0-9]{4})-([0-9]{2})-([0-9]{2})$

    这个正则表达式用于匹配日期,格式为 yyyy-mm-dd。它首先匹配四个数字,然后是一个 -,接着是两个数字,然后是一个 -,最后是两个数字。

  4. IP 地址:`^([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5]).([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5]).([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5]).([01]?[0-9][0-9]?|2[0-

4][0-9]|25[0-5])$`

这个正则表达式用于匹配 IP 地址。每个 IP 地址的部分必须是一个 0-255 的数字,这是由 `[01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5]` 这部分实现的。

正则表达式的强大之处在于其灵活性。你可以构造出几乎任何你需要的规则,从简单的匹配数字和字母,到复杂的电子邮件地址和 URL。理解了正则表达式的基本概念和语法后,你就可以开始创造你自己的正则表达式了。