2016-02-06 3 views
0

Я пробовал это в течение часа, но я не являюсь regexpert. То, что я хочу сделать, кажется довольно простым, но это намного сложнее, чем я думал.Регулярное совпадение между

В принципе у меня есть это:

<<< Some code 

    def prnt(string) 
     print(string) 
    end 

===== 

    def println(string) 
     puts(string) 
    end 

***** 
<<< Some more code 
... 

То, что я хочу сделать, это захватить все между первой линией <<< Some code и *****. В файле будет много таких блоков.

Регулярное выражение, которое у меня есть до сих пор, это (?:<<< .*\r?\n)([\s\S]+)(?:[*]{5}), но на самом деле это не работает. Есть идеи? Язык, в котором я его использую, - Go.

ответ

2

Ничего, что я понял!

(?:<<< .*\r?\n)([\s\S]*?)(?:[*]{5})

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

0

Это захватывает цель в 1-й группе, но вы должны использовать "точка соответствует новой строки" переключатель "S":

<<<[^\r\n]+[\r\n]*(.*?)[*]{5} 

См live demo.

Смежные вопросы