1

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

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

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

问题是,< 符号是 XML 语法的一部分,所以我将其替换为 <,使其成为:

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

问题是,在这样做之后,程序由于无效的正则表达式而崩溃。我已经缩小了范围,这肯定是导致问题的 < 。

那么有没有其他方法可以转义 < 尖括号,同时仍然允许正则表达式引擎使用它。

4

2 回答 2

2

<is&lt;和 not的 XML 实体&lt

于 2011-02-05T10:43:43.970 回答
0

在第一个正则表达式中,标记(?<=\#)是“积极的后视”,表示在比赛中你想回顾并看到一个文字磅符号(它已被转义,但不需要,# is' t 一个正则表达式元字符)。

如果您打算改为非捕获组,那么您想要的是(?: *pattern* ),即:(?:<=#)。据我所知,“小于”、“等于”和“磅”都是正则表达式中的正常字符,不需要转义。

于 2011-12-15T15:40:08.897 回答