Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用正则表达式匹配文本块中的选项卡_Ruby_Regex_Tabs - Fatal编程技术网

Ruby 使用正则表达式匹配文本块中的选项卡

Ruby 使用正则表达式匹配文本块中的选项卡,ruby,regex,tabs,Ruby,Regex,Tabs,如何匹配使用制表符缩进的文本块 假设我有以下文本: Lorem ipsum dolor sit amet, consectetur adipiscing elit. # This is a text block @some = 'ruby' @then = 'some more' Aliquam malesuada scelerisque orci, sed venenatis sem eleifend ac. Vestibulum vehicula sagitti

如何匹配使用制表符缩进的文本块

假设我有以下文本:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. # This is a text block @some = 'ruby' @then = 'some more' Aliquam malesuada scelerisque orci, sed venenatis sem eleifend ac. Vestibulum vehicula sagittis commodo. Praesent dapibus lacinia aliquam. Lorem ipsum dolor sit amet,是一位杰出的献身者。 #这是一个文本块 @some='ruby' @然后=‘再来一点’ 马利苏亚达蜥蜴(Aliquam malesuada scelerisque orci)是威尼斯人的一种,它是一种普通的车辆前庭。马蹄莲。
我想匹配所有选项卡中的内容(即代码)。

只要您不使用多行匹配,您就可以摆脱此问题:
/^\t++/

这将返回一个数组,每个块有一个字符串:

str = %Q{
Lorem ipsum dolor sit amet, consectetur adipiscing elit. 

\t# This is a text block
\t@some = 'ruby'
\t@then = 'some more'

Aliquam malesuada scelerisque orci, sed venenatis sem eleifend ac. Vestibulum vehicula sagittis commodo. Praesent dapibus lacinia aliquam.
\t# another block
\tfoo(bar)
}

str.scan(/(?:^\t.*\n)+/) #=> ["\t# This is a text block\n\t@some = 'ruby'\n\t@then = 'some more'\n", "\t# another block\n\tfoo(bar)\n"]

正是我想要的。非常感谢:此正则表达式将错误地匹配包含制表符的部分行,例如
%Q{\tfoo}
。您需要将选项卡锚定到行的开头,如下所示:
str.scan(/(?:^\t.+\n)+/)