2011-12-02 38 views
1

我對正則表達式有問題。塊縮進正則表達式

我想實現一個正則表達式來只選擇標籤縮進塊,但我不能找到使工作的一種方式:

例子:

INDENT(1) 
    INDENT(2) 
     CONTENT(a) 
     CONTENT(b) 
    INDENT(3) 
     CONTENT(c) 

所以我需要一個像塊:

INDENT(2) 
    CONTENT(a) 
    CONTENT(b) 

INDENT(3) 
    CONTENT(c) 

我該怎麼做?


真的TKS,它幾乎是,這是我原來需要:

table 
    tr 
     td 
      "joao" 
      "joao" 
     td 
      "marcos" 

我需要分開 「TD」 塊,我能適應你的例子嗎?


回答

1

這取決於正是你正在嘗試做的,但也許是這樣的:

^(\t+)(\S.*)\n(?:\1\t.*\n)* 

工作例如:http://www.rubular.com/r/qj3WSWK9JR

的模式進行搜索:

  • ^(\t+)(\S.*)\n - 一個以製表符開始的行(我也捕獲了組中的第一行,以查看效果),然後是
  • (?:\1\t.*\n)* - 具有更多選項卡的行。

同樣,您可以使用^(+)(\S.*)\n(?:\1 .*\n)*作爲空格(example)。混合空間和標籤可能有點問題,但。

對於更新的問題,請考慮使用^(\t{2,})(\S.*)\n(?:\1\t.*\n)*,該行的開頭至少有2個選項卡。

+0

哥們,真的TKS,它幾乎是,這是我原來需要: 表 TR TD 「若昂」 「若昂」 TD 「馬科斯」 我需要分開的「td」塊,我可以調整你的例子嗎? 真的很好! – joaomdmoura

+0

@ user999472 - 這是一個完全不同的問題......你爲什麼不問你需要什麼?你需要將文件解析爲HTML文檔嗎?如果您需要使我的解決方案適應您的代碼,您只需添加另一個選項卡:'^ \ t(\ t +)(\ S。*)\ n(?:\ 1 \ t。* \ n)*'或'^(\ t {2,})(\ S。*)\ n(?:\ 1 \ t。* \ n)*'。 – Kobi

+0

是的,就像它是一個來自預編譯器項目的詞法分析器,我認爲第一個例子很容易理解,但是劑量匹配,對此很感興趣 – joaomdmoura

1

您可以使用下面的正則表達式來獲得組...

[^\s]*.*\r\n(?:\s+.*\r*\n*)* 

這需要你的線條不是以空格開始爲塊的開始。

+0

對不起,我不知道紅寶石,幫助您更 –