我一直在使用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|(?<=\#))
问题是,执行此操作后,程序因正则表达式无效而崩溃。我把它缩小了,这肯定是导致这个问题的&amp; lt。
还有其他方法可以逃避&lt;角支架,同时仍允许正则表达式引擎使用它。
答案 0 :(得分:1)
<
的XML实体是<
而不是<
。
答案 1 :(得分:0)
在第一个正则表达式中,令牌(?<=\#)
是一个'正向后看',说在比赛的这一点你要回头看看一个字面的英镑符号(已被逃脱,但没有'需要的是,#不是正则表达式。
如果你想要一个非捕获组,你想要的是(?: *pattern* )
,即:(?:&lt; =#)。根据记录,据我所知,'小于','等于'和'磅'都是正则表达式中的正常字符,不需要转义。