нежадные/ленивые совпадения с регулярным выражением KATE

Я пытаюсь найти все между двумя словами (не буду говорить, какие два слова, потому что я не хочу, чтобы люди кричали, что вы не можете разобрать x с помощью регулярных выражений, вместо этого используйте анализатор x). У меня нет проблем с поиском начального и конечного слов, за исключением того, что конечное слово встречается не первым.

Я использую что-то вроде: startword((.*\n)*)endword

Это не так плохо, как опустить конечное слово, которое затем соответствует концу документа. Однако это не то, что мне нужно.

Я прочитал бесчисленное количество статей, в которых говорится, что мне нужен нежадный или ленивый поиск, который следует включить, поместив ? после **. Когда я пробую это в KATE, ничего не совпадает (startword((.*\n)*?)endword).

Меня также озадачивает другое поведение: у меня есть текст, в котором встречается endword\n\s**endword, но когда я использую его для завершения совпадения, он также терпит неудачу. Однако совпадение endword\n\s*endword само по себе работает так, как ожидалось.

Есть ли способ сделать ленивые регулярные выражения в KATE или кто-нибудь может предложить другое решение?

Спасибо.


person Gary Dale    schedule 16.07.2020    source источник
comment
Он документирует регулярные выражения в форме, доступной в KatePart, которая несовместима ни с регулярными выражениями perl, ни, например, с регулярными выражениями grep.   -  person Wiktor Stribiżew    schedule 16.07.2020
comment
Перечисленные квантификаторы не содержат ленивых квантификаторов, поэтому они не поддерживаются.   -  person Wiktor Stribiżew    schedule 16.07.2020
comment
Я вижу, что просмотр вперед поддерживается. Попробуйте startword([^e]*(?:e(?!ndword)[^e]*)*)endword (демонстрация)   -  person Wiktor Stribiżew    schedule 16.07.2020
comment
Спасибо Виктор. К сожалению, я тоже не могу заставить это работать. Lookaheads, похоже, имеет много вариаций в реализации...   -  person Gary Dale    schedule 16.07.2020


Ответы (1)


По какой-то причине (вероятно, связанной с моим недостаточным пониманием регулярных выражений) то, что я пробовал ранее, наконец-то сработало. Вместо того, чтобы иметь неопределенное количество строк между начальным словом и конечным словом, я смог указать его как неопределенное количество строк в форме (startword2.*endword2)*

Это устранило необходимость выполнять ленивую оценку.

person Gary Dale    schedule 16.07.2020