AvalonEdit: Regex捕获组在xshd文件

本文关键字:xshd 文件 Regex AvalonEdit | 更新日期: 2023-09-27 18:18:03

我正在尝试实现类似于docc的语法的语法高亮显示。因此,我必须捕获起始名称。但我失败了(尝试它在一个规则和跨度)。这是我的正则表达式:

(?:([A-Z]{3,}))(.|'n)*?'1

正则表达式在正则表达式测试器中工作。

但是如果我把它放在xshd定义我得到错误:

Error at line 128:
"(?:([A-Z]{3,}))(.|'n)*?'1" wird analysiert - Verweis auf die nicht definierte Gruppenzahl 1.

表示groupnumber 1没有定义。

有人知道原因吗?如何实现匹配?

谢谢

AvalonEdit: Regex捕获组在xshd文件

AvalonEdit使用RegexOptions.ExplicitCapture,因此您必须使用命名捕获组。

然而,你要做的是不可能在AvalonEdit。规则不能是多行,并且跨度的结束不能反向引用到跨度的开始。

这是因为高亮显示引擎单独高亮显示每一行,并且只会在用户编辑文本时重新高亮显示更改的行。为了支持HEREDOC结构,AvalonEdit需要将命名的捕获组的结果存储为span堆栈的一部分,并且需要支持一些特殊的语法,以便span end正则表达式可以使用对这些存储结果的反向引用。

"(?:([A-Z]{3,}))(.|'n)*?'1"

嗯,第一个括号(?:)是一个非捕获组,用于当你想分组时(比如对于|操作符),但你不关心"记住"它。第二个括号,你想要的第一组,在里面,([A-Z]{3,})。如果你说"不记得这里面是什么",它就不会这么做,这似乎是合乎逻辑的。

无论如何,在外部不捕获的情况下,双组的意义是什么?(当你不指定数量词序列的第二部分时,也不需要逗号)你不能直接说:

"([A-Z]{3})[.'n]*?'1"   //now '1 is defined?

至于你的第三组,(.|'n)*?,其中你一次使用分组+交替+量词,那么我不知道'3可能是什么,如果你试图在原始表达式中访问它:[.'n]*?应该是好的。

* ?

重复反向引用本身。

怎么样

(?: ([a - z] {3})) (' n]。* ?' 1