正则表达式中的前瞻和后顾。
前瞻(Lookahead)
前瞻是一种断言,它会检查在当前位置之后是否存在某种模式,但不会实际匹配该模式。前瞻有两种形式:
-
正向前瞻
(?=pattern)
- 检查当前位置之后是否存在指定的模式
- 如果存在,则匹配成功,但不会消耗该模式
- 例如
\w+(?=\d)
将匹配后面跟数字的单词,如 “apple42”、“hello123”
-
负向前瞻
(?!pattern)
- 检查当前位置之后是否不存在指定的模式
- 如果不存在,则匹配成功,但不会消耗该模式
- 例如
\w+(?!\d)
将匹配后面不跟数字的单词,如 “apple”、“hello”
后顾(Lookbehind)
后顾是一种断言,它会检查在当前位置之前是否存在某种模式,但不会实际匹配该模式。后顾有两种形式:
-
正向后顾
(?<=pattern)
- 检查当前位置之前是否存在指定的模式
- 如果存在,则匹配成功,但不会消耗该模式
- 例如
(?<=\$)\d+
将匹配美元符号后面的数字,如 “$42”、“$100”
-
负向后顾
(?<!pattern)
- 检查当前位置之前是否不存在指定的模式
- 如果不存在,则匹配成功,但不会消耗该模式
- 例如
(?<!\$)\d+
将匹配不在美元符号后面的数字,如 “42”、“100”
下面是一些示例,帮助你更好地理解前瞻和后顾的使用:
-
匹配以"http://"或"https://"开头的 URL:
- 正则表达式:
(?:http|https)://\S+
- 正则表达式:
-
匹配以"www."开头的域名:
- 正则表达式:
(?:www\.)\S+\.\w+
- 正则表达式:
-
匹配带有"@"符号的电子邮件地址,但不包括以"admin@"开头的:
- 正则表达式:
\b(?!admin@)\S+@\S+\.\w+\b
- 正则表达式:
-
匹配以"$“开头的数字,但不包括以”$0"开头的:
- 正则表达式:
(?<=\$)(?!0)\d+
- 正则表达式:
再举几个实例来帮助你更好地理解前瞻和后顾。
前瞻示例
-
匹配以"www."开头的域名,但不包括以"www.example.com"结尾的:
- 正则表达式:
(?=^www\.\S+$)(?!^www\.example\.com$)\S+
- 正则表达式:
-
匹配包含"http://"或"https://"的 URL,但不包括以"http://example.com"或"https://example.com"开头的:
- 正则表达式:
(?=^https?:\/\/\S+$)(?!^https?:\/\/example\.com\S*$)\S+
- 正则表达式:
-
匹配以"admin_"开头的用户名,但不包括以"admin_root"结尾的:
- 正则表达式:
(?=^admin_\S+$)(?!^admin_root$)\S+
- 正则表达式:
后顾示例
-
匹配以" " 结尾的数字 , 但不包括以 " "结尾的数字,但不包括以" "结尾的数字,但不包括以"$"开头的:
- 正则表达式:
(?<!\$)\d+\$
- 正则表达式:
-
匹配以".“结尾的文件名,但不包括以”.txt"结尾的:
- 正则表达式:
(?<!\.[tT][xX][tT]$)\.\w+$
- 正则表达式:
-
匹配以"admin:"开头的行,但不包括以"root:admin:"开头的:
- 正则表达式:
(?<!^root:)^admin:\S+
- 正则表达式:
这些示例展示了前瞻和后顾在各种场景下的应用,包括匹配 URL、用户名、文件名以及文本行等。通过这些示例,相信你对正则表达式中的前瞻和后顾有了更深入的理解。
这个AI工具超好用,每天都有免费额度,写文章、总结长视频、画图等,都几秒搞定!快去下载Sider Chrome或Edge插件,薅羊毛!
https://sider.ai/invited?c=2b94a5fccc7ce8fad5a89d3967577451