Как находить каждое вхождение шаблона и сопоставлять всю строку каждый раз?

#regex #kotlin

#регулярное выражение #kotlin

Вопрос:

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

Регулярное выражение 101

Я ищу любой текст в квадратных скобках, например: [foo], [bar], так что шаблон есть ([([a-zA-Z] ?)]) .

Теперь, чтобы заставить его занимать всю строку, я получил это:

 ^.*([([a-zA-Z] ?)]).*$
  

Но это решение принимает только последнее вхождение шаблона. Установка в качестве нежадного дает только первое вхождение.

В предоставленной ссылке шаблон регулярного выражения должен возвращать 2 совпадения с одной и той же найденной целой строкой и группой шаблонов.

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

Комментарии:

1. Какой язык программирования (или разновидность регулярных выражений) вы используете?

2. В настоящее время он используется для Kotlin.

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

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

5. @Andrew Вы также могли бы просто найти строки, содержащие хотя бы одну [...] (используя ^.*[[a-zA-Z] ].*$ ), а затем перебирать совпадения для поиска дополнительных совпадений. Это было бы очень просто в .NET, потому что он поддерживает повторяющиеся группы (они ЖЕ захваты). К сожалению, это не поддерживается вашим механизмом регулярных выражений.