Экранирующая угловая скобка XML в Regex - PullRequest
1 голос
/ 05 февраля 2011

Я использовал элемент управления ICSharp TextEditor, и он использует файл XML для обработки различных разделов подсветки синтаксиса (строки, комментарии и т. Д.) С помощью механизма регулярных выражений C #.

Итак, я использовал это регулярное выражение для сопоставления символов аккордов (из этого вопроса):

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

Проблема в том, что символ <является частью синтаксиса XML, поэтому я заменил его на & lt, сделав его: </p>

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

Проблема в том, что после этого происходит сбой программы из-за недопустимого регулярного выражения. Я сузил его, и именно это и является причиной проблемы.

Так есть ли другой способ избежать <угловой скобки, при этом позволяя движку регулярных выражений использовать его. </p>

Ответы [ 2 ]

1 голос
/ 05 февраля 2011

Элемент XML для < равен &lt;, а не &lt.

0 голосов
/ 15 декабря 2011

В первом регулярном выражении токен (?<=\#) является «положительным взглядом назад», говорящим, что в этот момент матча вы хотите оглянуться назад и увидеть буквальный символ фунта (который был экранирован, но не нужен быть # не является метасимволом регулярных выражений).

Если вместо этого вы собирались создать группу без захвата, то вам нужно было (?: *pattern* ), то есть: (?: <= #). Для записи «меньше чем», «равно» и «фунт» - все нормальные символы в регулярном выражении, насколько я знаю, и их не нужно экранировать. </p>

...