如何只匹配某个模式,如果在同一行上它前面没有特定的字符?
我有以下正则表达式代码:
pattern = @"(?<=^|[\s.(<;])(?<!//)(" + Regex.Escape(keyword) + @")(?=[\s.(>])";
replacement = "<span style='" + keywordStyle + "'>$1</span>";
code = Regex.Replace(code, pattern, replacement);
我希望添加一个条件,只有在同一行中没有两个斜杠的情况下才匹配(C#注释)。
我试着修改了这个模式:
pattern = @"(?<!\/\/)(?<=^|[\s.(<;])(?<!//)(" + Regex.Escape(keyword) + @")(?=[\s.(>])";
但是显然这只在关键字前面的2个斜线是2个字符时才有效。
所以这个模式不会匹配"//foreach",但会匹配"// foreach"。
在这种情况下,可以使用负回顾前瞻吗?或者我可以通过其他方式实现这一点,而不使用负回顾前瞻吗?
谢谢。
编辑:
我可能没有表达清楚。再次重申我的问题:
我正在进行语法高亮,并需要找到c#关键字的匹配项,比如"foreach"。然而,我还需要考虑注释,即由2个斜线定义的注释。如果它是注释的一部分(同一行上任何位置有2个斜线),我就不想匹配关键字"foreach"。
负回顾前瞻不能帮助我解决这个问题,因为斜杠不一定会紧挨着关键字,例如"// some text foreach" - 我不希望这个foreach被匹配。
所以,我的问题是:如何修改我的模式,只有在同一行上没有2个斜线在关键字之前时才匹配?
希望我的问题现在已经清楚了。