Возвышенный синтаксис Regex только выделяет совпадения внутри разделителей - PullRequest
0 голосов
/ 07 мая 2018

Я хотел бы сопоставить строку с регулярными выражениями, которые встречаются в указанных разделителях, но не самих разделителей, с целью подсветки синтаксиса в пакете Sublime Text. Я бегу ST3.

Например, из пакета sublime-notes этот элемент <dict> используется для сопоставления текста между < и >, , включая сами угловые скобки, что приводит к выделению <this> вместо <<code>this>.

<dict>
    <key>comment</key>
    <string>Important, surrounded by &lt;...&gt;</string>
    <key>match</key>
    <string>(\&lt;[^\&gt;]*\&gt;)</string>
    <key>name</key>
    <string>constant.other.date.notes</string>
</dict>

Как я могу изменить регулярное выражение между тегами <string>, чтобы не включать угловые скобки в подсветку синтаксиса?

1 Ответ

0 голосов
/ 07 мая 2018

Вы можете поместить левый и правый разделители в обходные конструкции:

<string>(?&lt;=&lt;)([^&gt;]*)(?=&gt;)</string>

Или, используя блок CDATA, чтобы избежать сериализации специальных символов XML:

<string><![CDATA[(?<=<)([^>]*)(?=>)]]></string>

Шаблон будет выглядеть как (?<=<)([^>]*)(?=>) после того, как синтаксический анализатор XML десериализует строку шаблона, а (?<=<) будет соответствовать местоположению, которому непосредственно предшествует < char, тогда как положительный прогноз (?=>) гарантирует, что следующий символ будет > (или совпадение не удастся).

...