【发布时间】:2016-06-23 11:55:26
【问题描述】:
我在运行我自己的定制语言的应用程序中使用 AvalonEdit。我已经定义了一个可以正常工作的 highlighting.xml 文件。
现在我正在尝试根据以下内容对其进行扩展:
出现在“方法”之后的下一个单词是蓝色的。
我想出了这个正则表达式来做到这一点:
(?s)(?<=method )(.+?)(?= )
并使用此输入对其进行测试:
via method AMethod on interface
这与http://regexstorm.net/tester 配合得很好。
然后我尝试了以下规则,但都没有奏效。有了它们,什么都不会再突出显示了。
<Rule foreground="DarkBlue">
\(?s)(?<=method )(.+?)(?= )
</Rule>
<Rule foreground="DarkBlue">
\(?s)(?<=method )(.+?)(?= )
</Rule>
<Rule foreground="DarkBlue">
(?s)(?<=method )(.+?)(?= )
</Rule>
这个没有破坏突出显示,但也没有工作:
<Rule foreground="DarkBlue">
(?s)(?<=method )(.+?)(?= )
</Rule>
我正在尝试做的事情可能吗? 正则表达式是否正确?我对正则表达式完全一无所知。
提前致谢。
Divisadero 的回答更新
这些打破了突出显示。
<Rule foreground="DarkBlue">
\(?s)(?<=method )([^' ']+)
</Rule>
<Rule foreground="DarkBlue">
\(?s)(?<=method )([^' ']+)
</Rule>
<Rule foreground="DarkBlue">
(?s)(?<=method )([^' ']+)
</Rule>
这些不会破坏突出显示但不起作用:"
<Rule foreground="DarkBlue">
(?s)(?<=method )([^' ']+)
</Rule>
【问题讨论】:
-
在您的语言中,
via、method、on和interface是否定义为关键字?也就是说,它们是否都包含在<Keywords>规则中?您是否有一般用户定义名称的规则,例如\b\w+\b或\b[A-Z]\w*\b之类的正则表达式? -
只有方法和接口是绿色的关键字。文件末尾还有这条规则:
\b0[xX][0-9a-fA-F]+ # hex number | \b ( \d+(\.[0-9]+)? #带可选浮点数 | \.[0-9]+ #或者只是从浮点数开始 ) ([eE][+-]?[0 -9]+)? # 可选指数
标签: c# regex syntax-highlighting avalonedit