我可以使用带有前缀条件的 Regex 检测字符位置吗?

Can I detect a char position using Regex with a prefix condition?

我有一个代表方程语句的字符串:a = b * c 在我正在编写的工具中。

该字符串可能包含 "comment" 语句后缀,* 表示注释。

我将 AvalonEdit 用于文本编辑器对象,并尝试编写正确的 XSHD 文件定义以匹配检测注释字符串以突出显示。

我不确定这是否可以通过正则表达式检测到,因为 * 字符根据其使用上下文有两个含义。

例如,

  1. a = b * c : * 是 match multiply char, 并且没有发出评论信号(没有评论突出显示)
  2. abcdef abcd * a comment :这里 * 是注释字符,字符串 a comment 应突出显示为注释
  3. a = b * c * a comment :这里第一个 * 是匹配运算符,但第二个是注释字符...因此字符串 a comment 应突出显示为注释

我在 XSHD 文件中尝试了以下用于评论检测的定义:

<Span color="Comment" begin="\*" end="\n" /> 这个 cleary 解决了第二个例子......但它会错误地将 c 设置为示例 1.

下的评论

然后我尝试 <Span color="Comment" begin="^(?!.*=.*\*).*?\*.*" end="\n" /> ,使用负前瞻方法解决示例 1,但随后它捕获整个字符串作为示例 2 的注释。

两种定义都无法检测示例 3 的场景。

我想知道我的问题是否不能通过正则表达式解决(如 XSHD 所要求的),因为 * 用于两种不同的含义..

我正在使用 AvalonEdit 5.0.4。

有解决办法吗?

嗯,这真的取决于你的语法有多灵活。但是,根据您提供的内容,试试这个:

\*\s?\w( ?[\w]+)+

随时测试一下 here。 有了这个,您不需要用空格分隔任何内容,但它允许有空格。我在下面的 regex101 中提供了两条测试线,看看这是否符合您的需要。