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# 技术干货!如果觉得有用,记得收藏本文

相关推荐
We་ct41 分钟前
LeetCode 918. 环形子数组的最大和:两种解法详解
前端·数据结构·算法·leetcode·typescript·动态规划·取反
wefly20171 小时前
m3u8live.cn 在线M3U8播放器,免安装高效验流排错
前端·后端·python·音视频·前端开发工具
C澒2 小时前
微前端容器标准化 —— 公共能力篇:通用打印
前端·架构
德育处主任Pro2 小时前
前端元素转图片,dom-to-image-more入门教程
前端·javascript·vue.js
木斯佳2 小时前
前端八股文面经大全:小红书前端一二面OC(下)·(2026-03-17)·面经深度解析
前端·vue3·proxy·八股·响应式
陈天伟教授2 小时前
人工智能应用- 预测新冠病毒传染性:04. 中国:强力措施遏制疫情
前端·人工智能·安全·xss·csrf
zayzy3 小时前
前端八股总结
开发语言·前端·javascript
今天减肥吗3 小时前
前端面试题
开发语言·前端·javascript
Rabbit_QL3 小时前
【前端UI行话】前端 UI 术语速查表
前端·ui·状态模式
小码哥_常3 小时前
一文带你吃透Android BLE蓝牙开发全流程
前端