2017-01-25 26 views
1

Учитывая этот многострочный текст:regex: задана многострочная строка, как соответствовать тексту, включенному после указанной строки, расположенной в начале каждой строки?

abc aaa 
bbb abc ccc 
abc ddd eee 
fff abc 

Я хочу, чтобы соответствовать abc слова в начале каждой строки в качестве первой согласующей группы, а остальной текста до следующегоabc, расположенного в начале линии.

Таким образом, это ожидаемый результат матча:

Match 1 
Full match `abc aaa 
bbb abc ccc` 

Group 1. `abc` 
Group 2. ` aaa 
      bbb abc ccc` 

Match 2 
Full match `abc ddd eee 
fff abc` 

Group 1. `abc` 
Group 2. ` ddd eee 
      fff abc` 

Я попытался это регулярное выражение (с многострочным опции):

/^(abc)([\w\s]+)/gm 

Но результат не так, потому что он берет текст в общей сложности :

Match 1 
Full match `abc aaa 
bbb abc ccc 
abc ddd eee 
fff abc` 

Group 1. `abc` 
Group 2. ` aaa 
bbb abc ccc 
abc ddd eee 
fff abc` 

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

Обратите внимание, что слово «abc» может сравниваться также с остальной частью «внутреннего сегмента» строки.

Заранее спасибо.

ответ

2

Использование

/^(abc\b)(.*(?:\r?\n(?!abc\b).*)*)/gm 

Смотрите regex demo

Детали:

  • ^ - начало линии
  • (abc\b) - целое слово abc (удалить \b если вы не нужно целое слово)
  • (.*(?:\r?\n(?!abc\b).*)*) - Группа 2 захватывая
    • .* - остальную часть строки, которая начинается с abc
    • (?:\r?\n(?!abc\b).*)* - 0+ последовательности:
      • \r?\n(?!abc\b) - линии не следует: abc
      • .* - остальная часть текущей линии.
+0

Brilliant! Оно работает! Большое спасибо! –