正则表达式 熟能生巧
发布日期:2021-05-20 00:14:06 浏览次数:24 分类:精选文章

本文共 1779 字,大约阅读时间需要 5 分钟。

正则表达式是一种强大的工具,广泛应用于文本处理、数据验证和数据提取等多个领域. 它通过定义特定的字符模式来匹配字符串中的某些部分.

正则表达式概述

正则表达式(Regular Expression,简称regex)是一种用于文本匹配的语言-like模式表达式,主要用于判断字符串是否符合特定结构或格式. 与编程语言不同,正则表达式专门用于字符匹配,不涉及计算逻辑或算法执行.

正则表达式由两类字符组成:

  • 普通字符:包括大小写字母、数字、标点符号及其他符号. 例如,a、A、0-9、!、@等.
  • 元字符:是一些具有特殊含义的字符,需要用 特殊处理来 meanings. 比如^表示匹配字符串开头的位置,$表示字符串末尾的位置.

正则表达式的基础元字符

grepegrepsedawk等工具中,以下是常见的正则表达式元字符及其用途:

  • 转义字符

    • 用于取消元字符的特殊含义. 例如:
      • \! 匹配感叹号.
      • \n 匹配换行符.
      • \d 匹配任意一位数字.
  • 位置元字符

    • ^:匹配字符串开头的位置。例如:
      • ^a 匹配开头是字母'a'.
      • ^the 匹配以“the”开头的字符串.
    • $:匹配字符串结尾的位置。例如:
      • word$ 匹配以“word”结尾的字符串.
      • ^$ 匹配空字符串(即长度为0的字符串)。
  • 匹配单字符

    • .:匹配任意一个字符,除换行符外。例如:
      • go.d 匹配“go”后跟一个字符,再后跟“d”. 例如:g..d或g\d.
  • 重复元字符

    • {}:用于规定某个子表达式的重复次数. 例如:
      • go{d} 匹配“go”后面跟随0次或多次“d". 例如:gooodgood.
      • [0-9]{2,5} 匹配长度为2到5位的数字.
  • 字符集合

    • [list]:匹配list列表中的任意一个字符。例如:
      • [a-z] 匹配一个小写字母.
      • [0-9] 匹配任意一位数字.
    • [^list]:匹配不属于list集合的字符。例如:
      • [^0-9] 匹配任意非数字字符.
  • 数量限定

    • {n}:匹配前面的子表达式恰好n次。例如:
      • [0-9]{2} 匹配两位数字.
      • go{2,3} 匹配“go”后跟2到3次重复的子表达式.
  • 范围限定

    • {n,}:匹配前面的子表达式至少n次。例如:
      • [0-9]{2,} 匹配两位及以上数字.
  • 组合限定

    • {n,m}:匹配前面的子表达式从n次到m次。例如:
      • [0-9]{2,3} 匹配两位到三位数字.
  • 需要注意的是,在egrepawk中,数量限定符{n}{n,}{n,m}不需要额外的转义字符.


    正则表达式的扩展应用

    在实际应用中,正则表达式可以通过组合多个元字符和子表达式来实现更复杂的匹配任务。以下是一些常见的扩展元字符:

  • 重复与可选元字符

    • +:匹配前面的子表达式至少1次。例如:
      • aa+$ 匹配“aaa”或“aaaa”结尾的字符串.
    • ?:匹配前面的子表达式0次或1次。例如:
      • ab?c 匹配“abc”或“ac”.
  • 括号与分组

    • ():将括号内的内容作为一个整体进行匹配。例如:
      • g(oo)+d 匹配“good”或“good”。
  • 或逻辑元字符

    • |:表示或的逻辑关系,用于匹配多个选项中的一个。例如:
      • g(oo|la)d 匹配“good”或“glad”。

  • 实际应用示例

    以下是一些实际应用场景,展示正则表达式的独特优势:

  • 获取指定格式的座机号

    • 要求:座机号通常由国家代码、区号和个位数组成,格式为“XXX-XXXX-XXXX”。
    • 正则表达式^\d{3}-\d{3}-\d{3}$
    • 解释^\d{3} 匹配首三位数字;-\d{3} 匹配区号;-\d{3}$ 匹配个位数,整个字符串从开头到结尾共有九位数字,符合座机号格式。
  • 获取指定格式的邮箱地址

    • 要求:邮箱地址一般包含用户名、域名和顶级域名,格式为“username@domain.com”。
    • 正则表达式^([A-Za-z0-9_\-.+]+)@([A-Za-z0-9_\-.]+)\.([A-Za-z]{2,5})$
    • 解释
      • ^([A-Za-z0-9_\-.+]+):匹配用户名(可包含字母、数字、符号等),且必须放在开头。
      • @:匹配@"的符号。
      • ([A-Za-z0-9_\-.]+):匹配子域名。
      • \.([A-Za-z]{2,5})$:匹配顶级域名(长度在2到5位之间),并且整个字符串从开头到结尾符合格式。
  • 上一篇:Java封装
    下一篇:4种 数组排序算法(冒泡/直接/反转/希尔排序),好好拿捏它!

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年04月30日 12时36分34秒