在正则表达式中转义XML角度括号

时间:2011-02-05 10:39:14

标签: c# xml regex avalonedit

我一直在使用ICSharp TextEditor控件,它使用XML文件使用C#正则表达式引擎计算出不同的语法高亮部分(字符串,注释等)。

所以我一直在使用这个正则表达式来匹配和弦符号(来自这个问题):

\b[A-G](?:add|maj|j|m|\+|b|\#|sus|\d|°)*(?:\b|(?<=\#))

问题是,&lt; symbol是XML语法的一部分,所以我用&amp; lt替换它,使它成为:

\b[A-G](?:add|maj|j|m|\+|b|\#|sus|\d|°)*(?:\b|(?&lt=\#))

问题是,执行此操作后,程序因正则表达式无效而崩溃。我把它缩小了,这肯定是导致这个问题的&amp; lt。

还有其他方法可以逃避&lt;角支架,同时仍允许正则表达式引擎使用它。

2 个答案:

答案 0 :(得分:1)

<的XML实体是&lt;而不是&lt

答案 1 :(得分:0)

在第一个正则表达式中,令牌(?<=\#)是一个'正向后看',说在比赛的这一点你要回头看看一个字面的英镑符号(已被逃脱,但没有'需要的是,#不是正则表达式。

如果你想要一个非捕获组,你想要的是(?: *pattern* ),即:(?:&lt; =#)。根据记录,据我所知,'小于','等于'和'磅'都是正则表达式中的正常字符,不需要转义。