相关疑难解决方法(0)

如何在Ruby中修复此多行正则表达式?

我在Ruby中有一个正则表达式,在多行模式下无法正常工作.

我正在尝试将Markdown文本转换为Redmine中使用的Textile-eque标记.问题出在我转换代码块的正则表达式中.它应该找到任何带有4个空格或标签的行,然后将它们包装在标签中.

markdownText = '# header

some text that precedes code

    var foo = 9;
    var fn = function() {}

    fn();

some post text'

puts markdownText.gsub!(/(^(?:\s{4}|\t).*?$)+/m,"<pre>\n\\1\n</pre>")
Run Code Online (Sandbox Code Playgroud)

预期结果:

# header

some text that precedes code

<pre>
    var foo = 9;
    var fn = function() {}

    fn();
</pre>

some post text
Run Code Online (Sandbox Code Playgroud)

问题是关闭标记打印在文档的末尾而不是"fn();"之后.我尝试了以下表达式的一些变体,但它不匹配:

gsub!(/(^(?:\s{4}|\t).*?$)+^(\S)/m, "<pre>\n\\1\n</pre>\\2")
Run Code Online (Sandbox Code Playgroud)

如何使正则表达式仅与缩进的代码块匹配?你可以在这里测试Rubular上的这个正则表达式.

ruby regex multiline

7
推荐指数
1
解决办法
6686
查看次数

标签 统计

multiline ×1

regex ×1

ruby ×1