В этом вопросе основное внимание уделяется pcre -регулярному выражению, используемому grep -P
.
Представьте, что у меня есть строка abcRabcSxyxz
и я ищу подстроку, которая начинается с abc
и заканчивается на x
, но с ограничением, что никакая более короткая подстрока этого совпадения также не будет соответствовать.
Моя первая попытка была не жадным регулярным выражением,
grep -Po 'abc.*?x' <<<abcRabcSxyxz
, но это возвращает abcRabcSx , а я хотел бы найти только abcSx . Очевидно, почему даже моя не жадная попытка все же дает слишком долгое совпадение; Мне нужен движок регулярных выражений, чтобы постараться. Моя вторая попытка была
grep -Po '(?>abc.*?)x' <<<abcRabcSxyxz
, которая вообще не дала совпадения (возможно, я действительно не понимаю использование ($?...)
объяснено здесь ).
Любое простое решение моей проблемы?
ОБНОВЛЕНИЕ Я вижу из комментариев, что мой пример не совсем точно объясняет, что я ищу, поэтому здесь более общий описание:
Я ищу совпадения в форме PXQ
, где P, X и Q являются произвольными шаблонами, а X должен не содержать совпадение с P. Плюс, я не 'Не хочу буквально повторно вводить шаблон P внутри X.
Например,
`[(][^(]*[)]`
было бы возможным (но не удовлетворяющим) решением для конкретного случая, в котором я ищу заключенный в скобки выражение, которое не содержит других скобок (здесь P - [(], X - произвольная строка, а Q - [)]), но даже этот пример показывает, что я должен буквально повторить содержащуюся информацию в P при указании средней части ([^ (] *), чтобы убедиться, что мой P там не содержится). Я ищу способ, который избавит от необходимости в этом явном повторении.