LINUX.ORG.RU

Помогите написать регулярку.

 


0

1
const/16\s+(\S+),\s+(\S+)((?!const)[\s\S])*?move.*\s+(\S+),\s+\1[\s\S]*?(invoke-static/range\s+(\{\4[^}]+\}),\s+Lru/App;->i\(([^)]*)\)(?:V|(\S+)\s+(\S+\s+(\S+))))
    const/16 v18, 1
    const/16 v18, 1

    move v0, v18

    invoke-static

Применяю такую регулярку, к такому тексту. Хочу получить текст от const/16 v18 до invoke-static. А получаю от самого крайнего const/16 v18, нужно от самого ближайшего const/16 v18. Подскажите почему не работает, где ошибка ?



Последнее исправление: dibr0v72 (всего исправлений: 1)

В твоём чдовище разбираться никто не будет. Многострочный текст обрабатывать регулярками - идея так себе, лучше сделай на awk. Хочешь именно регулярки - гугли жадность регулярных выражений.

pinus_nigra
()
Ответ на: комментарий от pinus_nigra

Вот более простой пример: const first const move invoke-static

const[\s\S]*?invoke Именно делаю, отключая жадность, добавив знак вопроса. Но почему он возвращает от первого const.

dibr0v72
() автор топика
Ответ на: комментарий от anonymous

Действительно работает, но если написать в несколько строк типа так:

const 1
const 2
invoke

Хочу получить: const 2 invoke Этот пример с установкой .+ в начале уже не работает. Я пробую так: ^.+(const[\s\S]+invoke). Но с многострочным текстом не хочет, захватывает все. Как правильно, подскажите, пожалуйста.

dibr0v72
() автор топика
Ответ на: комментарий от dibr0v72

У меня здесь одна строка, объединенная знаком переноса \n а не три.

 PS >@"
const 1
const 2
invoke
"@ -replace '^.+\n(.+)','$1'
const 2
invoke
 PS > 
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.