2009-08-20 15 views
1

Wie kann ich einen Textblock, der mit Tabs eingerückt ist, abgleichen?Passende Registerkarte in Textblöcken mit Regex

Sagen, ich habe den folgenden Text:

 
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. 

Ich möchte alle Inhalte übereinstimmen, die in Registern ist (. Dh der Code).

Antwort

3

Dies wird ein Array mit einem String pro Block zurück:

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

Genau das, was nach dem ich war. Vielen Dank: D –

+2

Diese Regex stimmt fälschlicherweise mit Teilen von Zeilen überein, die eine Registerkarte enthalten, z. B. "% Q {\ tfoo}". Sie müssen die Registerkarte an den Anfang von Zeilen wie folgt verankern: 'str.scan (/(?:^\t.+\n)+/)' – FMc

+0

Guter Fang. Fest. – sepp2k

0

Solange Sie keine mehrzeiligen Übereinstimmungen verwenden, können Sie damit fortfahren: /^\t+.+/.