gpt4 book ai didi

c# - 带反向引用的正则表达式前瞻

转载 作者:行者123 更新时间:2023-11-30 19:46:41 25 4
gpt4 key购买 nike

我正在尝试构建一个带有语法高亮的非常具体的编辑器。我已经用正则表达式制作了所有简单的东西,这很简单,但现在我想添加一些高级功能也用正则表达式。

在这种情况下,我想知道是否在任何 JumpTo 命令上使用了定义的标签。
示例:

Define1,Command,Command
Define2,Command,Command,JumpTo4
Define3,Command,Command,JumpTo1
Define4,Command,Command

这里的目标是找到每个被 JumpTo(一个或多个)引用的 Define (Definexxx),可能在定义之前或之后。在另一个步骤中,我还想找到未被任何 JumpTo 引用的任何 Define

我已尝试使用表达式“Define(? \d+)(?=JumpTo\k ) ”进行正向预测。我希望它会找到“Define1”,但它没有(无论是否有多行选项)。

这是否可以通过正则表达式一步完成,还是我应该放弃这个想法,只考虑两步法?

最佳答案

您快到了,只是忘记了 .*。我还添加了一个回顾断言,以便在当前定义之前进行检查:

Regex regexObj = new Regex(
@"Define(?<tag>\d+\b) # Match Define<number>
(?: # Match either...
(?=.*JumpTo\k<tag>\b) # if JumpTo<number> occurs somewhere ahead
| # or...
(?<=JumpTo\k<tag>\b.*) # if JumpTo<number> occurs somewhere before
) # End of alternation",
RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);

我添加了 \b 字边界 anchor 以确保我们始终匹配整个数字(如果我们达到 Define10 及以上,这将变得很重要)。

另外,请注意 Singleline 选项的使用。这就是您想要的,而不是 Multiline,它指的是 ^$ 的匹配方式。

关于c# - 带反向引用的正则表达式前瞻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8122310/

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