正则表达式 高级特性(贪婪与断言)

正则表达式 高级特性

贪婪与非贪婪匹配

默认情况下是贪婪匹配的,即尽可能多地匹配

  • 在量词后面加上?变为非贪婪匹配

示例:

对于字符串"aabab"

  • 默认贪婪匹配
a.*b

匹配结果:

aabab
  • 非贪婪匹配, 尽可能少匹配
a.*?b

匹配结果:

aab  ab

零宽断言

断言是正则表达式中用于指定匹配位置的元字符,他们不匹配任何实际字符,而是匹配字符之间的位置。

特点:

  • 零宽度:不占用匹配字符的位置
  • 条件检查:只检查是否满足特定条件
  • 不影响匹配结果:仅作为匹配的约束条件

断言类型

断言 说明 示例
?=exp 正向先行断言,检查当前位置之后是否匹配特定模式 (ab)(?=c) 仅匹配ab后面跟着c的ab,即abcabd中仅匹配第一个ab
?!exp 负向先行断言,匹配后面不跟着exp的位置 (ab)(?!c)对于abcabd仅匹配第二个ab
?<=exp 正向后行断言,检查当前位置之前是否匹配特定模式 (?<=a)(bc) 对于abcqbc仅会匹配第一个bc
?<!exp 负向后行断言,匹配前面不是exp的位置 (?<!a)(bc) 对于abcqbc仅会匹配第二个bc

正则表达式常见应用场景

密码强度验证

要求密码至少包含一个大写字母、一个小写字母和一个数字,但不以数字开头:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z]\w{7,}$

详细解释

^                          # 字符串开始
(?=.*[a-z])               # 必须包含至少1个小写字母(正向预查)
(?=.*[A-Z])               # 必须包含至少1个大写字母(正向预查)
(?=.*\d)                  # 必须包含至少1个数字(正向预查)
[A-Za-z]                  # 首字符必须是字母
\w{7,}                    # 后续字符可以是字母/数字/下划线,且总长度≥8(首字符+7)
$                          # 字符串结束

邮箱验证

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

详细解释

^                         # 字符串开始
[a-zA-Z0-9._%+-]+         # 用户名部分(允许字母、数字、点、下划线、百分号、加号、减号)
@                         # 必须包含 @ 符号
[a-zA-Z0-9.-]+            # 域名部分(允许字母、数字、点、减号)
\.                        # 必须包含一个点(.)
[a-zA-Z]{2,}              # 顶级域名(至少2个字母,如 com、org、net)
$                         # 字符串结束
posted @ 2025-08-06 16:13  风陵南  阅读(22)  评论(0)    收藏  举报