你好,我嘗試創建一個正則表達式,可以解析一個ini文件。正則表達式爲多行.ini文件
但我希望ini值可以是多行的!
就像是:
Wert1=Hallo
dsadasd
Wert2=Hi
Wert3=Heinirch Volland
我嘗試用這個表達式,但它不工作:
/.*=(.*)^.*=/gsm
你好,我嘗試創建一個正則表達式,可以解析一個ini文件。正則表達式爲多行.ini文件
但我希望ini值可以是多行的!
就像是:
Wert1=Hallo
dsadasd
Wert2=Hi
Wert3=Heinirch Volland
我嘗試用這個表達式,但它不工作:
/.*=(.*)^.*=/gsm
你可以要使用此PCRE正則表達式:
/^.*=.*[^=]*$/gm
試試吧here。
這依賴於缺少s
單線標誌,請注意不要設置它。 m
ultiline標誌也是必要的,如果合適的話,可以使用 lobal。
這從含等號(^.*=.*
)的線的起點相匹配,然後將匹配不包含等號,因爲它可以([^=]*$
,其中[^=]
將匹配的換行)一樣多的整行。
你似乎是使用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
我猜你是試圖讓所有的ini值,要做到這一點,你可以用這個正則表達式:
/^(.*)=(.*)/gm
,你就可以訪問使用羣體的價值觀,每個小組將檢索到你鍵和值
如果沒有's'單線標誌,這將不符合多行值,並且會過於貪婪地與它匹配 – Aaron
你是什麼意思,它「不起作用」?它完全不符合? – Dan
你在用什麼語言? – Dan
嘗試['/^([^=\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解析庫,但最好使用一個。 –