2009-08-20 60 views
1

如何匹配使用選項卡縮進的文本塊?使用正則表達式在文本塊中匹配選項卡

說我有以下文字:

 
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. 

我想匹配所有在標籤內容(即代碼)。

回答

3

這將返回一個陣列,每塊一個字符串:

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

\t# This is a text block 
\[email protected] = 'ruby' 
\[email protected] = '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\[email protected] = 'ruby'\n\[email protected] = 'some more'\n", "\t# another block\n\tfoo(bar)\n"] 
+0

正是我在後。非常感謝:D – 2009-08-20 15:25:04

+2

這個正則表達式會錯誤地匹配包含選項卡的行的部分,如'%Q {\ tfoo}'。您需要將選項卡固定到行首,如下所示:'str.scan(/(?:^\t.+\n)+/)' – FMc 2009-08-20 15:41:23

+0

好的。固定。 – sepp2k 2009-08-20 17:30:41

0

只要你不使用多行匹配,你可以逃脫這個:/^\t+.+/