У меня есть такая строка:

abcabcdeabc...STRING INSIDE...xyz

Я хочу найти "... СТРОКА ВНУТРИ ...", поэтому я использую приведенное ниже регулярное выражение, чтобы сопоставить его:

(?<=abc).*(?=xyz)

Проблема в том, что в строке дублируется «abc», поэтому она возвращает «abcdeabc ... STRING INSIDE ...», но я хочу сопоставить только что-либо между последними «abc» и «xyz». Это возможно? И если да, то как я могу этого добиться? Спасибо.

Попробуйте здесь: https://regex101.com/r/gS9Xso/3

2
Louis Tran 3 Янв 2018 в 04:30

2 ответа

Лучший ответ

Попробуйте этот шаблон:

.*(?<=abc)(.*)(?=xyz)

Ведущий .* поглотит все до последнего abc, затем число будет захвачено.

Демо

Мы также можем попробовать использовать следующий шаблон:

.*abc(.*?)xyz

Вот демонстрация второго шаблона:

Демо

2
Tim Biegeleisen 3 Янв 2018 в 01:51

Это должно сработать.

[^\d]*abc(\d+)xyz[^\d]*

Смотрите на Debuggex

0
OverCoder 3 Янв 2018 в 01:41