Составляю выражение для текста вида
to [Login 1] to [Login 2] произвольный текст
Блоков "to [Login]" может быть любое кол-во, в том числе 0. Нужно вытащить логины и текст сообщения.
Написал выражение
^(to \[([\w\s]*)\]\s*)*(.*)$
Если его применить к указанному тексту, результат будет такой:
0: (to [Login 1] to [Login 2] произвольный текст)
1: (to [Login 2] )
2: (Login 2)
3: (произвольный текст)
Почему в результаты попадает только второй (нас самом деле последний) блок "to [Login]"? Если выражение заменить на
^(to \[([\w\s]*)\]\s*)(to \[([\w\s]*)\]\s*)(.*)$
то есть повторить первую скобку, результат будет тем, который и нужен, но только для двух блоков.
0: (to [Login 1] to [Login 2] произвольный текст)
1: (to [Login 1] )
2: (Login 1)
3: (to [Login 2] )
4: (Login 2)
5: (произвольный текст)