仅当同一行中前面没有特定字符时,如何匹配模式?
我有以下正则表达式代码:
pattern = @"(?<=^|[\s.(<;])(?<!//)(" + Regex.Escape(keyword) + @")(?=[\s.(>])";
replacement = "<span style='" + keywordStyle + "'>$1</span>";
code = Regex.Replace(code, pattern, replacement);
我想添加一个条件,仅在同一行前面没有 2 个斜杠时才匹配(C# 注释)。
我尝试了一下,并修改了模式:
pattern = @"(?<!\/\/)(?<=^|[\s.(<;])(?<!//)(" + Regex.Escape(keyword) + @")(?=[\s.(>])";
但显然这只有在 2 个斜杠是 2 个字符的情况下才有效就在之前关键字。
所以这个模式不会匹配“//foreach”,但会匹配“//foreach”。
在这种情况下可以使用负回顾,或者除了负回顾之外我可以通过其他方式实现这一点吗?
谢谢。
EDIT:
估计是我表达得不够清楚。重申一下我的问题:
我正在研究语法突出显示,我需要找到 c# 关键字的匹配项,例如“foreach”。但是,我还需要考虑由 2 个斜杠定义的注释。我不想匹配关键字“foreach”,如果它是注释的一部分(在同一行上的任何地方都有两个斜杠。
在这种情况下,负向后查找对我没有帮助,因为斜杠不一定位于关键字之前,例如“// some text foreach” - 我不希望此 foreach 匹配。
所以,我的问题是:如何修改我的模式,使其仅在同一行前面没有两个斜杠的情况下匹配?
希望我的问题现在清楚了。
稍微简化一下你的正则表达式模式,下面的怎么样?它利用“//”上的非贪婪匹配加上 0 个或更多字符。
(?<!//.*?)(?<Keyword>foreach)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)