正则表达式-前瞻和后顾

时间:2024-05-06 07:35:41

正则表达式中的前瞻和后顾。

前瞻(Lookahead)

前瞻是一种断言,它会检查在当前位置之后是否存在某种模式,但不会实际匹配该模式。前瞻有两种形式:

  1. 正向前瞻 (?=pattern)

    • 检查当前位置之后是否存在指定的模式
    • 如果存在,则匹配成功,但不会消耗该模式
    • 例如 \w+(?=\d) 将匹配后面跟数字的单词,如 “apple42”、“hello123”
  2. 负向前瞻 (?!pattern)

    • 检查当前位置之后是否不存在指定的模式
    • 如果不存在,则匹配成功,但不会消耗该模式
    • 例如 \w+(?!\d) 将匹配后面不跟数字的单词,如 “apple”、“hello”

后顾(Lookbehind)

后顾是一种断言,它会检查在当前位置之前是否存在某种模式,但不会实际匹配该模式。后顾有两种形式:

  1. 正向后顾 (?<=pattern)

    • 检查当前位置之前是否存在指定的模式
    • 如果存在,则匹配成功,但不会消耗该模式
    • 例如 (?<=\$)\d+ 将匹配美元符号后面的数字,如 “$42”、“$100”
  2. 负向后顾 (?<!pattern)

    • 检查当前位置之前是否不存在指定的模式
    • 如果不存在,则匹配成功,但不会消耗该模式
    • 例如 (?<!\$)\d+ 将匹配不在美元符号后面的数字,如 “42”、“100”

下面是一些示例,帮助你更好地理解前瞻和后顾的使用:

  1. 匹配以"http://"或"https://"开头的 URL:

    • 正则表达式: (?:http|https)://\S+
  2. 匹配以"www."开头的域名:

    • 正则表达式: (?:www\.)\S+\.\w+
  3. 匹配带有"@"符号的电子邮件地址,但不包括以"admin@"开头的:

    • 正则表达式: \b(?!admin@)\S+@\S+\.\w+\b
  4. 匹配以"$“开头的数字,但不包括以”$0"开头的:

    • 正则表达式: (?<=\$)(?!0)\d+

再举几个实例来帮助你更好地理解前瞻和后顾。

前瞻示例

  1. 匹配以"www."开头的域名,但不包括以"www.example.com"结尾的:

    • 正则表达式: (?=^www\.\S+$)(?!^www\.example\.com$)\S+
  2. 匹配包含"http://"或"https://"的 URL,但不包括以"http://example.com"或"https://example.com"开头的:

    • 正则表达式: (?=^https?:\/\/\S+$)(?!^https?:\/\/example\.com\S*$)\S+
  3. 匹配以"admin_"开头的用户名,但不包括以"admin_root"结尾的:

    • 正则表达式: (?=^admin_\S+$)(?!^admin_root$)\S+

后顾示例

  1. 匹配以" " 结尾的数字 , 但不包括以 " "结尾的数字,但不包括以" "结尾的数字,但不包括以"$"开头的:

    • 正则表达式: (?<!\$)\d+\$
  2. 匹配以".“结尾的文件名,但不包括以”.txt"结尾的:

    • 正则表达式: (?<!\.[tT][xX][tT]$)\.\w+$
  3. 匹配以"admin:"开头的行,但不包括以"root:admin:"开头的:

    • 正则表达式: (?<!^root:)^admin:\S+

这些示例展示了前瞻和后顾在各种场景下的应用,包括匹配 URL、用户名、文件名以及文本行等。通过这些示例,相信你对正则表达式中的前瞻和后顾有了更深入的理解。

在这里插入图片描述

这个AI工具超好用,每天都有免费额度,写文章、总结长视频、画图等,都几秒搞定!快去下载Sider Chrome或Edge插件,薅羊毛!
https://sider.ai/invited?c=2b94a5fccc7ce8fad5a89d3967577451