gpt4 book ai didi

c# - 正则表达式 - 在线任何地方的负面回顾

转载 作者:行者123 更新时间:2023-12-05 00:07:13 24 4
gpt4 key购买 nike

仅当同一行上没有特定字符之前,我如何匹配模式?

我有以下正则表达式代码:

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”。

在这种情况下可以使用负向后视吗,或者除了负向后视之外,我可以通过其他方式实现这一点吗?

谢谢你。

编辑:

估计我说的不够清楚。重申我的问题:

我正在研究语法高亮,我需要找到 c# 关键字的匹配项,例如“foreach”。但是,我还需要考虑由 2 个斜线定义的注释。我不想匹配关键字“foreach”,如果它是评论的一部分(在同一行之前的任何地方有 2 个斜线。

在这种情况下,负向后视对我没有帮助,因为斜杠不一定在关键字之前,例如“//some text foreach” - 我不希望这个 foreach 匹配。

所以,我的问题是:如何修改我的模式以仅在同一行上没有 2 个斜线之前的任何位置时才匹配?

希望我的问题现在清楚了。

最佳答案

稍微简化一下你的正则表达式模式,下面呢?它利用“//”上的非贪婪匹配加上之后的 0 个或更多字符。

(?<!//.*?)(?<Keyword>foreach)

关于c# - 正则表达式 - 在线任何地方的负面回顾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11925305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com