У меня есть регулярное выражение в Ruby, которое не работает должным образом в многострочном режиме.
Я пытаюсь преобразовать текст Markdown в разметку Textile-eque, используемую в Redmine. Проблема в моем регулярном выражении для преобразования блоков кода. Он должен найти любые строки, начинающиеся с 4 пробелов или табуляции, затем заключите их в теги pre .
markdownText = '# header
some text that precedes code
var foo = 9;
var fn = function() {}
fn();
some post text'
puts markdownText.gsub!(/(^(?:\s{4}|\t).*?$)+/m,"\n\\1\n
")
Предполагаемый результат:
# header
some text that precedes code
var foo = 9;
var fn = function() {}
fn();
some post text
Проблема в том, что закрывающий тег pre печатается в конце документа, а не после "fn ( ); ". Я пробовал несколько вариантов следующего выражения, но оно не соответствует:
gsub!(/(^(?:\s{4}|\t).*?$)+^(\S)/m, "\n\\1\n
\\2")
Как заставить регулярное выражение соответствовать только блоку кода с отступом? Вы можете проверить это регулярное выражение на Rubular здесь .