C# AvalonEdit 突出显示正则表达式直到新行
C# AvalonEdit Highlighting Regex till new line
我正在修改 C# 中 AvalonEdit 的代码以创建另一个语法突出显示。
我想为 LOG-files 创建自己的样式,突出显示的代码如下所示:
时间在前面蓝色,后面的文字是绿色(信息),橙色(警告),红色(错误)。
对于单行日志没问题,但对于多行。所以我将 RuleSet 更改为 Spans:
<SyntaxDefinition name="LOG" extensions=".log" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
<Color name="Time" foreground="#38a1d4" />
<Color name="Info" foreground="#69b26a" />
<Color name="Warning" foreground="#e1b561" />
<Color name="Error" foreground="#db5e5e" />
<RuleSet>
<Rule color="Time">\d\d:\d\d:\d\d</Rule>
<Rule color="Time">\d\d:\d\d:\d\d</Rule>
<Span color="Info" multiline="true">
<Begin>\[I\]:</Begin>
<End>[\s\S](?=\n\d\d:\d\d:\d\d)</End>
</Span>
<Span color="Warning" multiline="true">
<Begin>\[W\]:</Begin>
<End>[\s\S](?=\n\d\d:\d\d:\d\d)</End>
</Span>
<Span color="Error" multiline="true">
<Begin>\[E\]:</Begin>
<End>[\s\S](?=\n\d\d:\d\d:\d\d)</End>
</Span>
</RuleSet>
</SyntaxDefinition>
但为什么 End Span 不适用于我的多线?
在 github 上的 dgrunwald 的帮助下,我终于解决了这个问题。
解决方案几乎很容易。 AvalonEdit 语法高亮逐行匹配代码。所以 Regex 总是被比作一行。这就是为什么它永远无法匹配 \n 换行的原因。
这里是解决方案:
<Span color="Error" multiline="true">
<Begin>\[E\]:</Begin>
<End>^(?=\d\d:\d\d:\d\d)</End>
</Span>
现在的结果是这样的:
感谢 dgrunwald!
我正在修改 C# 中 AvalonEdit 的代码以创建另一个语法突出显示。 我想为 LOG-files 创建自己的样式,突出显示的代码如下所示:
时间在前面蓝色,后面的文字是绿色(信息),橙色(警告),红色(错误)。 对于单行日志没问题,但对于多行。所以我将 RuleSet 更改为 Spans:
<SyntaxDefinition name="LOG" extensions=".log" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
<Color name="Time" foreground="#38a1d4" />
<Color name="Info" foreground="#69b26a" />
<Color name="Warning" foreground="#e1b561" />
<Color name="Error" foreground="#db5e5e" />
<RuleSet>
<Rule color="Time">\d\d:\d\d:\d\d</Rule>
<Rule color="Time">\d\d:\d\d:\d\d</Rule>
<Span color="Info" multiline="true">
<Begin>\[I\]:</Begin>
<End>[\s\S](?=\n\d\d:\d\d:\d\d)</End>
</Span>
<Span color="Warning" multiline="true">
<Begin>\[W\]:</Begin>
<End>[\s\S](?=\n\d\d:\d\d:\d\d)</End>
</Span>
<Span color="Error" multiline="true">
<Begin>\[E\]:</Begin>
<End>[\s\S](?=\n\d\d:\d\d:\d\d)</End>
</Span>
</RuleSet>
</SyntaxDefinition>
但为什么 End Span 不适用于我的多线?
在 github 上的 dgrunwald 的帮助下,我终于解决了这个问题。 解决方案几乎很容易。 AvalonEdit 语法高亮逐行匹配代码。所以 Regex 总是被比作一行。这就是为什么它永远无法匹配 \n 换行的原因。
这里是解决方案:
<Span color="Error" multiline="true">
<Begin>\[E\]:</Begin>
<End>^(?=\d\d:\d\d:\d\d)</End>
</Span>
现在的结果是这样的:
感谢 dgrunwald!