Вытащить определенные слова из строк которые начинаются одинаково

Допустим есть текст:

abc cab abc 
123: abc cab abc cab
abc cab abc
123: abc cab abc cab

Нужно вытащить все abc и cab из строк которые начинаются с 123: Если (\babc\b)|(\bcab\b) то тащит со всех строк. Если что-то типа такого (^123.*(?|(\babc\b)|(\bcab\b)).*) то вытаскивает из нужных строк только последнее совпадение. Пробовал такое ^123:(?=.*\b(cab|bac)\b) но тоже только последнее


Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Используйте

(?:\G(?!^)|^123:).*?\b\K(?:cab|bac)\b

См. пример работы регулярного выражения.

Подробности

  • (?:\G(?!^)|^123:) - 123: в начале строки или конец предыдущего совпадения
  • .*? - ноль и более символов, отличных от символов переноса строки, как можно меньше
  • \b - граница слова
  • \K - оператор, удаляющий текст из буфера текущего совпадения
  • (?:cab|bac) - слова или
  • \b - граница слова.
→ Ссылка