You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式匹配下一行非指定内容?VS2017实践疑问

如何在VS2017中用正则匹配下一行不是指定内容的行

嘿,我来帮你搞定这个正则匹配的问题!你要实现的是匹配带有SizeConst参数的MarshalAs属性行,同时确保下一行不是对应数字的SizeConst属性,对吧?

先说说你原来正则里的小问题:你用([^\s])*来捕获SizeConst的值,这个表达式只能匹配单个非空白字符然后重复,要是值是多位数(比如15),它只会捕获最后一个字符(也就是5),后面反向引用\1自然就不对了。

给你修正后的正则表达式,直接在VS2017里就能用:

\[\s*MarshalAs\s*\(\s*UnmanagedType\s*\.\s*ByValArray\s*,\s*SizeConst\s*=\s*(\d+)\s*\)\]\s*\r?\n\s*(?!\[\s*SizeConst\s*\(\s*SizeConst\s*=\s*\1\s*\)\])

我给你拆解下关键部分:

  • (\d+):替换了你原来的([^\s])*,专门用来完整捕获SizeConst的数字值,不管是一位数还是多位数都能搞定。
  • \s*\r?\n\s*:保持了你原来的写法,兼容Windows的\r\n换行,同时忽略换行前后的空格、制表符这些空白。
  • (?!...):这个负向预查的逻辑是对的,现在结合正确的捕获组\1,就能准确判断下一行是不是和上一行数字匹配的SizeConst属性了。

举个测试例子:

会被匹配的情况

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 15)]
public byte[] UserData;

不会被匹配的情况

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 15)]
[SizeConst(SizeConst = 15)]
public byte[] UserData;

这样调整后,应该就能精准匹配你想要的内容啦!

内容的提问来源于stack exchange,提问作者Lee Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:32:51