Фильтр регулярных выражений (flavour: PCRE) для сопоставления первого экземпляра символьной строки. ТОЛЬКО фильтр только в контексте этого первого экземпляра? - PullRequest
0 голосов
/ 01 апреля 2020

Я хочу сопоставить первый экземпляр «start» в этой исходной строке

abcdstartabcdstartghijstartghij

Я использовал следующее регулярное выражение для (не жадного) захвата всего через первый «start».

^.*?start

Теперь я фильтрую ПЕРВЫЙ экземпляр "start" с прикрепленным к нему "ghij".

Когда я попробовал следующее, он отфильтровывался до ВТОРОГО «запуска» с «ghij»

^.*?startghij

Моя проблема в том, что я хочу, чтобы он НЕ МОЖЕТ найти «начало» с « ghij "потому что" ghij "НЕ с первым" start ". По сути, я хочу, чтобы последний фильтр не работал.

Какой фильтр регулярных выражений будет фильтровать для этого первого экземпляра и только в контексте этого первого экземпляра? Он не должен go ко второму «запуску», хотя у него есть «ghij».

Надеюсь, мой пример объяснил мой вопрос немного яснее.

1 Ответ

0 голосов
/ 01 апреля 2020

Не существует такой вещи, как "в n-м случае ... и делай ...", по крайней мере, не напрямую. Посмотрите на проблему n-го вхождения как «до этого было n - 1 вхождение». В вашем случае вы ищете первое вхождение, которое означает, что в точности не было вхождений раньше. Таким образом, вместо части .*? вам нужно сопоставить строку, не содержащую определенную подстроку .

В вашем случае это могло бы выглядеть примерно так:

^(?:(?!start).)*?startghij

Это должно работать и с большинством регулярных выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...