Нахождение совпадения между двумя совпадениями с использованием одинаковых групп захвата - PullRequest
0 голосов
/ 06 сентября 2018

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

Вот основное регулярное выражение, чтобы показать суть моей проблемы -

(\d)(.*?)(\d)

Так что, если у меня есть эта строка -

aaa 4 bbb 5 ccc 6 ddd 7 eee

Из этого я получаю два матча (здесь демоверсия @ regex101 ) -

  1. 4 bbb 5 с группами захвата 4, bbb , 5
  2. 6 ddd 7 с группами захвата 6, ddd , 7

но должно быть третье совпадение между двумя совпадениями, которые используют последнюю группу захвата из первого совпадения и первую группу захвата из последнего совпадения.

  • 5 ccc 6 с группами захвата 5, ccc , 6

У кого-нибудь есть идеи, как это решить?

Спасибо

1 Ответ

0 голосов
/ 06 сентября 2018

В основном вам нужно использовать функцию «смотреть вперед», чтобы ваши совпадения не проходили дальше желаемых значений, с которых нужно начинать следующее совпадение.

(\d)(.*?)(?=(\d))

Вы также можете изменить его для поиска нечисловых значений вместо ленивого поиска

(\d)(\D*)(?=(\d))

А вот демоверсия для тех, кто думал, что это неправильно.

...