Я не могу сопоставить последовательность между двумя конкретными словами - PullRequest
2 голосов
/ 19 сентября 2019

Я хочу найти строку, которая находится между двумя конкретными словами.Посмотрите на картинку, которую я сделал.Проблема в том, что «INICIO» появляется дважды, я просто хочу, чтобы он соответствовал последнему появлению до слова «FIM».В этом случае я хотел, чтобы первым шаблоном был INICIOBBBBBBBBBBBFIM.Мне нужно сопоставить все вхождения в строке.

Ссылка на Regex

My Regex

Ответы [ 4 ]

4 голосов
/ 19 сентября 2019

То, что вы ищете, звучит как то, что Rexegg называет жадный жетон закаленной формы .

INICIO(?:(?!INICIO).)*?FIM

Смотрите обновленную демонстрацию на regex101

Отрицательный взгляд «умерил» точку, чтобы не перепрыгнуть через другое началоЭта практика довольно затратна, так как перед каждой позицией предвидение смотрит вперед, если впереди нет INICIO.

Если интересно, есть хороший ответ на SO , объясняющий это более подробноподробно.

0 голосов
/ 19 сентября 2019

Переверните строку и найдите

 MIF.*?OICINI

Затем переверните совпадение

 "JJJJJJJJJJJJJJJINICIOAAAAAAAAAAAAINICIOBBBBBBBBBBBBFIMJJJJJJJJJJJJJJINICIOJJJJJJJJJJJJJJFIM"
      .split("")
      .reverse()
      .join("")
      .match(/MIF.*?OICINI/g)[1]
      .split("")
      .reverse()
      .join("");

(Обратите внимание, что я на самом деле собираю второе совпадение здесь. Это потому, что совпаденияв обратном порядке)

0 голосов
/ 19 сентября 2019

Немного придумано, но это может сработать:

(?<=INICIO).*?(INICIO.*?FIM)|(?<=FIM).*?(INICIO.*?FIM)

Ваш результат будет в $2

https://regex101.com/r/qUf4kE/1

0 голосов
/ 19 сентября 2019

Может быть,

.*(INICIO.*?FIM)

или

INICIO(?!.*\BINICIO\B)\B.*?\BFIM

может быть в порядке для начала.


Если вы хотите упростить / изменить / изучитьВыражение было объяснено на верхней правой панели regex101.com .Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами ввода.


Демонстрация 2

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