C#如何匹配不在引号内的特定字符(斜杠/)
匹配未被双引号包裹的斜杠/的正则方案
需求说明
要匹配所有未被双引号(")包含的斜杠/,以下是示例及目标匹配位置(用/标记):
- HKEY
/"SOFTWARE"/"test/123"/ - HKEY
/"SOFTWARE"/test - HKEY
/SOFTWARE/"test/123"/ - HKEY
/SOFTWARE/test//test - HKEY
/SOFTWARE/"test - HKEY
/SOFTWARE/"test/
之前尝试的正则/((?=[^""]*(?:""[^""]*""[^""]*)*$))效果不佳,且多数现成方案要么无效,要么是其他语言的实现。
可行正则表达式
使用以下正则可以精准匹配目标斜杠:
/(?=(?:[^"]*"[^"]*")*[^"]*$)
原理说明
(?=...)正向预查,用于验证当前位置之后的内容是否符合引号规则(?:[^"]*"[^"]*")*匹配零或多组成对的双引号及其中间内容,确保前面的引号都是闭合状态[^"]*$匹配到字符串结尾的所有非引号内容,确保当前斜杠不在未闭合的引号范围内
这个正则能覆盖示例里的所有场景,包括存在未闭合引号的情况——未闭合引号后的斜杠会被自动排除匹配。
内容的提问来源于stack exchange,提问作者GhostVaibhav
相关产品推荐
相关产品推荐

