一分钟区分:正则表达式&通配符

331 阅读3分钟

正则表达式的用法和语法

什么是正则表达式?

正则表达式(Regex)是用于匹配字符串中字符组合的序列。它主要用于数据验证、搜索、替换和文本处理等场景。

常用的正则表达式语法

  1. 基本字符:直接匹配自身字符,例如 a 匹配字符 'a'。

  2. 字符类:使用中括号 [] 可以匹配其中的任意字符。

    • 例如 [abc] 匹配 'a'、'b' 或 'c',[0-9] 匹配任意数字。
  3. 元字符

    • .:匹配除了换行符以外的任何单个字符。
    • \d:匹配任何数字,等同于 [0-9]
    • \D:匹配任何非数字字符。
    • \w:匹配任何字母数字字符,等同于 [a-zA-Z0-9_]
    • \W:匹配任何非字母数字字符。
    • \s:匹配任何空白字符(如空格、制表符)。
    • \S:匹配任何非空白字符。
  4. 量词

    • *:匹配前面的字符 0 次或多次。
    • +:匹配前面的字符 1 次或多次。
    • ?:匹配前面的字符 0 次或 1 次。
    • {n}:匹配前面的字符恰好 n 次。
    • {n,}:匹配前面的字符至少 n 次。
    • {n,m}:匹配前面的字符 n 到 m 次。
  5. 边界匹配

    • ^:表示字符串的开始。
    • $:表示字符串的结束。
  6. 分组与捕获

    • (...):用于分组,可以对组合的子表达式进行重复或应用量词,同时可以捕获匹配的内容。
  7. 逻辑或

    • |:表示或的关系,例如 a|b 匹配 'a' 或 'b'。

常见使用场景及例子

  1. 电子邮件验证

    ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
    

    用于匹配有效的电子邮件地址。

  2. URL 验证

    ^https?://[a-zA-Z0-9.-]+(\.[a-zA-Z]{2,})?(/[^ ]*)?$
    

    用于匹配 HTTP 或 HTTPS 网址。

  3. 手机号码验证

    ^1[3-9]\d{9}$
    

    用于匹配中国的手机号码。

  4. 日期格式验证

    ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
    

    用于匹配 YYYY-MM-DD 格式的日期。

  5. 提取文本: 可以用正则表达式提取特定格式的文本,例如提取所有链接:

    https?://[^\s]+
    

通配符的用法和语法

什么是通配符?

通配符是一种用于进行简单模式匹配的符号,通常用于文件名匹配和查询。常见的通配符有 *?

通配符语法

  1. *:匹配任意数量的字符,包括零个字符。

    • 例如,*.txt 匹配所有以 .txt 结尾的文件。
  2. ?:匹配任意单个字符。

    • 例如,file?.txt 匹配 file1.txtfileA.txt,但不匹配 file.txt
  3. [...]:可以匹配字符集中的任意一个字符。

    • 例如,file[1-3].txt 匹配 file1.txtfile2.txtfile3.txt

常见使用场景及例子

  1. 文件搜索

    • 在文件管理器中使用 *.jpg 来查找所有的 JPEG 图片。
  2. 日志文件筛选

    • 使用 access_*.log 来筛选所有以 access_ 开头的日志文件。
  3. 数据库查询

    • SQL 查询中使用 LIKE 结合通配符,例如 SELECT * FROM users WHERE name LIKE 'A%' 匹配所有以 'A' 开头的用户。
  4. URL 路由

    • 在 web 路由中使用 *.html 来匹配所有以 .html 结尾的请求。

正则表达式和通配符的区别

  1. 复杂性

    • 正则表达式支持复杂的模式匹配,包括字符类、量词、分组等,功能强大。
    • 通配符主要用于简单的字符串匹配,功能相对较少。
  2. 应用场景

    • 正则表达式广泛用于数据验证、文本处理和复杂匹配,如电子邮件、电话号码等。
    • 通配符通常用于文件名匹配、简单查询和一些数据库操作。
  3. 语法形式

    • 正则表达式使用特定的元字符和语法规则。
    • 通配符使用简单的符号(如 *?)进行匹配。
  4. 灵活性

    • 正则表达式提供更多的灵活性和选项,可以精确控制匹配的规则。
    • 通配符的使用相对固定,缺乏高级的匹配能力。

总结来说,正则表达式是一个功能强大的工具,适合于处理复杂的字符串匹配需求,而通配符在简单匹配中更为直观和易于使用。选择使用哪种工具应依据具体的应用场景和需求。