C# 正则表达式(5):前瞻/后顾(Lookaround)——零宽断言做“条件校验”和“精确提取”

一、四种 Lookaround 语法总览

1. 正向前瞻(必须能看到...)

regex 复制代码
(?=...)

2. 负向前瞻(必须看不到...)

regex 复制代码
(?!...)

3. 正向后顾(前面必须是...)

regex 复制代码
(?<=...)

4. 负向后顾(前面必须不是...)

regex 复制代码
(?<!...)

二、前瞻:最常见的"密码/复杂规则校验"写法

1.至少包含一个字母和一个数字(长度 8~16)

需求:

  • 总长度 8~16
  • 只能字母数字
  • 至少 1 个字母
  • 至少 1 个数字

正则:

regex 复制代码
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,16}$

拆解:

  • ^...$:整串校验
  • (?=.*[A-Za-z]):从当前位置往后看,必须能找到字母
  • (?=.*\d):必须能找到数字
  • [A-Za-z\d]{8,16}:真正需要匹配字符的主体

C#:

csharp 复制代码
var pattern = @"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,16}$";
Regex.IsMatch("abc12345", pattern); // True
Regex.IsMatch("abcdefgh", pattern); // False (无数字)
Regex.IsMatch("12345678", pattern); // False (无字母)

三、负向前瞻:禁止某些前缀/全局禁用模式

1. 不能以 admin 开头(不区分大小写可用选项)

csharp 复制代码
Regex.IsMatch("AdminUser", @"^(?!admin)\w+$", RegexOptions.IgnoreCase); // False
Regex.IsMatch("user_admin", @"^(?!admin)\w+$", RegexOptions.IgnoreCase); // True

四、后顾:做"切片式提取"

Lookbehind 非常适合"提取某个标记后面的内容",但不想把标记本身包含进匹配结果。

1. 提取 UserId= 后面的数字

文本:

text 复制代码
UserId=42 Action=Login

正则:

regex 复制代码
(?<=UserId=)\d+

C#:

csharp 复制代码
var input = "UserId=42 Action=Login";
var m = Regex.Match(input, @"(?<=UserId=)\d+");
Console.WriteLine(m.Value); // 42

2. 提取 URL 参数值(示例:id= 后面的一段数字)

regex 复制代码
(?<=\bid=)\d+

五、负向后顾:避免"被转义的分隔符"等场景

一个典型需求:找到未被反斜杠转义的引号/分隔符。

例如找文本中"不是 \""":

regex 复制代码
(?<!\\)"

含义:

  • (?<!\\):前面不是反斜杠
  • ":匹配一个双引号

注意:这只是一个常见思路,真实字符串里会有双重转义(C# 字符串字面量与文本内容的转义混在一起),写测试时要分清"源文本到底是什么"。


结语

点个赞,关注我获取更多实用 C# 技术干货!如果觉得有用,记得收藏本文

相关推荐
女生也可以敲代码20 分钟前
AI时代下的50道前端开发面试题:从基础到大模型应用
前端·面试
ZhengEnCi27 分钟前
M5-markconv自定义CSS样式指南 📝
前端·css·python
IT_陈寒1 小时前
SpringBoot自动配置的坑差点让我加班到天亮
前端·人工智能·后端
xingpanvip1 小时前
星盘接口开发文档:星相日历接口指南
android·开发语言·前端·css·php·lua
@PHARAOH1 小时前
WHAT - GitLens supercharged 插件
前端
TT模板1 小时前
苹果cms整合西瓜播放器XGplayer插件支持跳过片头尾
前端·html5
Wect2 小时前
React 性能优化精讲
前端·react.js·性能优化
xiaogutou11212 小时前
2026年历史课件PPT模板选购指南:教师备课效率与精度的平衡方案
开发语言·c#
追风筝的人er2 小时前
SpringBoot+Vue3 企业考勤如何处理法定假期?节假日方案、调休补班与工作日判断链路拆解
前端·vue.js·后端
无敌的黑星星3 小时前
Java8 CompletableFuture 实战指南
linux·前端·python