我可以使用带有前缀条件的 Regex 检测字符位置吗?
Can I detect a char position using Regex with a prefix condition?
我有一个代表方程语句的字符串:a = b * c
在我正在编写的工具中。
该字符串可能包含 "comment" 语句后缀,*
表示注释。
我将 AvalonEdit 用于文本编辑器对象,并尝试编写正确的 XSHD 文件定义以匹配检测注释字符串以突出显示。
我不确定这是否可以通过正则表达式检测到,因为 *
字符根据其使用上下文有两个含义。
例如,
a = b * c
: *
是 match multiply char, 并且没有发出评论信号(没有评论突出显示)
abcdef abcd * a comment
:这里 *
是注释字符,字符串 a comment
应突出显示为注释
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 中提供了两条测试线,看看这是否符合您的需要。
我有一个代表方程语句的字符串:a = b * c
在我正在编写的工具中。
该字符串可能包含 "comment" 语句后缀,*
表示注释。
我将 AvalonEdit 用于文本编辑器对象,并尝试编写正确的 XSHD 文件定义以匹配检测注释字符串以突出显示。
我不确定这是否可以通过正则表达式检测到,因为 *
字符根据其使用上下文有两个含义。
例如,
a = b * c
:*
是 match multiply char, 并且没有发出评论信号(没有评论突出显示)abcdef abcd * a comment
:这里*
是注释字符,字符串a comment
应突出显示为注释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 中提供了两条测试线,看看这是否符合您的需要。