1

私は ICSharp TextEditor コントロールを使用してきました。これは XML ファイルを使用して、C# 正規表現エンジンでさまざまな構文強調セクション (文字列、コメントなど) を処理します。

だから私はこの正規表現を使用してコード記号を一致させてきました(この質問から):

\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

最初の正規表現では、トークン(?<=\#)は「肯定的な後読み」であり、一致のこの時点で振り返って、リテラルのポンド記号 (エスケープされていますが、エスケープする必要はありませんでした。 t 正規表現メタ文字)。

代わりに非キャプチャ グループを意図した場合、必要なものは(?: *pattern* )、つまり (?:<=#) でした。記録として、'less than'、'equals'、および 'pound' はすべて、私の知る限り正規表現の通常の文字であり、エスケープする必要はありません。

于 2011-12-15T15:40:08.897 に答える