Можно ли сопоставить шаблон с помощью регулярного выражения через новую строку в UltraEdit? - PullRequest
1 голос
/ 30 января 2009

Текстовый редактор UltraEdit включает в себя Perl и Unix-совместимый механизм регулярных выражений для поиска.

Я хочу иметь возможность сопоставить строковую строку со следующим:

<branch id="attribute">
    <leaf id="attribute"/>
    <leaf id="attribute"/>
    <leaf id="attribute"/>
</branch>

Что-то вроде этого:

/<branch id="attribute">.*</branch>/gis

Есть ли способ сделать это с помощью UltraEdit?

Ответы [ 3 ]

3 голосов
/ 30 января 2009

Если вы поставите (? S) в начале шаблона, он включит однострочный режим, поэтому \ r \ n не будет исключен из соответствия. *

Например, следующее соответствует всему элементу ветви (в UEStudio 6 с регулярным выражением в стиле Perl):

(?s)<branch id="attribute">.*</branch>

В небольшом эксперименте поддерживаются и другие параметры Perl. например (? sx-i) в начале будет одной строкой, игнорируя пробелы eXtra в шаблоне, с учетом регистра (кажется, по умолчанию он не учитывает регистр).

2 голосов
/ 30 января 2009

Если вы выбрали регулярные выражения Perl, вы можете сделать что-то вроде:

<branch id="attribute">[\s\S]*</branch>

где \ s - любой символ пробела, включая символ новой строки и возврата, а \ S - любой другой символ. Обратите внимание, что это жадный по умолчанию, поэтому, если у вас есть следующая строка:

<branch id="attribute">
  <leaf id="attribute"/>
  <leaf id="attribute"/>
  <leaf id="attribute"/>
</branch>
<branch id="attribute">
  <leaf id="attribute"/>
  <leaf id="attribute"/>
  <leaf id="attribute"/>
</branch>

тогда одно регулярное выражение найдет ВСЮ строку как одно совпадение. Если вы не хотите этого делать, добавьте ? следующим образом:

<branch id="attribute">[\s\S]*?</branch>

Как видно из ответов, в UltraEdit есть много способов сделать это!

ПРИМЕЧАНИЕ. Протестировано с UltraEdit 14.20.

0 голосов
/ 30 января 2009

Вы пробовали:

/<branch id="attribute">[.\n]*</branch>/gis
...