Соответствие шаблону, которому предшествует определенный шаблон, без использования просмотра назад

Есть ли способ сопоставить B, только если ему предшествует A? A может находиться в любой позиции позади B с любым количеством символов между ними. Примеры:

A_B (Matches `B`)

C_B (No match)

Я пробовал:

(?=A)[^B]*B

Но он также соответствует всем символам, предшествующим B. Мой движок регулярных выражений не поддерживает поисковые запросы переменной длины. Есть ли способ сделать это?

Изменить: в настоящее время я использую встроенный поиск регулярных выражений в Eclipse, однако я использую regex101.com для проверки.


person jmrah    schedule 22.06.2015    source источник
comment
Вы используете это выражение из программы на Java?   -  person Sergey Kalinichenko    schedule 22.06.2015
comment
Вы также не указали язык регулярных выражений, который может дать вам много ответов, которые вам не нужны.   -  person Anonymous    schedule 22.06.2015
comment
@anubhava Я хочу, чтобы совпадало только B. Вопрос был отредактирован.   -  person jmrah    schedule 22.06.2015


Ответы (1)


Обходной путь для отсутствия ретроспективного просмотра переменной длины доступен в ситуациях, когда ваши строки имеют относительно небольшой фиксированный верхний предел своей длины. Например, если вы знаете, что длина строки не превышает 100 символов, вы можете использовать {0,100} вместо * или {1,100} вместо + внутри выражения просмотра назад:

(?<=A[^B]{0,100})B

Когда длина вашей строки не имеет очевидного верхнего предела, вы можете вообще отказаться от ретроспективного просмотра, использовать вместо него незахватывающую группу, поместить захватывающую группу поверх B и использовать содержимое этой группы как результат вашего регулярного выражения.

person Sergey Kalinichenko    schedule 22.06.2015
comment
Теперь, когда я думаю об этом больше, я думаю, что решение группы без захвата/захвата является правильным. Что я по существу хочу сделать, так это сохранить позицию совпадения в строке после успеха просмотра вперед, но это не работает так. И этот квантификатор повторения фиксированной длины для просмотра назад — это круто. Не знал об этом. Спасибо за ответ. - person jmrah; 22.06.2015