2017-07-12 17 views
0

你好,我嘗試創建一個正則表達式,可以解析一個ini文件。正則表達式爲多行.ini文件

但我希望ini值可以是多行的!

就像是:

Wert1=Hallo 
dsadasd 
Wert2=Hi 
Wert3=Heinirch Volland 

我嘗試用這個表達式,但它不工作:

/.*=(.*)^.*=/gsm 
+0

你是什麼意思,它「不起作用」?它完全不符合? – Dan

+1

你在用什麼語言? – Dan

+0

嘗試['/^([^=\r\n]+)=(.+(?:\r?\n(?![^=\r\n]+=).*)*)/gm '](https://regex101.com/r/fdlP42/1)。如果密鑰只能由字符組成,請使用['/^(\w+)=(.+(?:\r?\n(?!\w+=).*)*)/gm'](https: //regex101.com/r/fXzJxA/1)。雖然有編程語言的INI解析庫,但最好使用一個。 –

回答

1

你可以要使用此PCRE正則表達式:

/^.*=.*[^=]*$/gm 

試試吧here

這依賴於缺少s單線標誌,請注意不要設置它。 m ultiline標誌也是必要的,如果合適的話,可以使用 lobal。

這從含等號(^.*=.*)的線的起點相匹配,然後將匹配不包含等號,因爲它可以([^=]*$,其中[^=]將匹配的換行)一樣多的整行。

0

你似乎是使用Perl。你有沒有考慮過使用Config::IniFiles?該模塊將處理解析INI類型文件給你,並有使用定界符多參數的支持:

Parameter=<<EOT 
value/line 1 
value/line 2 
EOT 

或者,如果你Config::IniFiles->new(..., -allowcontinue => 1);啓用它,續行:

[Section] 
Parameter=this parameter \ 
    spreads across \ 
    a few lines 
0

我猜你是試圖讓所有的ini值,要做到這一點,你可以用這個正則表達式:

/^(.*)=(.*)/gm 

,你就可以訪問使用羣體的價值觀,每個小組將檢索到你鍵和值

+0

如果沒有's'單線標誌,這將不符合多行值,並且會過於貪婪地與它匹配 – Aaron