2017-07-12 2 views
0

Hallo, ich versuche einen Regex-Ausdruck zu erstellen, der eine Ini-Datei analysieren kann.Regex für multiline.ini-Datei

Aber ich möchte, dass die Ini-Werte mehrzeilig sein können!

wie folgt aus:

Wert1=Hallo 
dsadasd 
Wert2=Hi 
Wert3=Heinirch Volland 

Ich versuche es mit diesem regulären Ausdruck, aber es funktioniert nicht:

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

Was meinst du, es "funktioniert nicht"? Es passt überhaupt nicht zusammen? – Dan

+1

Welche Sprache verwenden Sie? – Dan

+0

Probiere ['/^([^=\r\n]+)=(.():\r?\n(?![^=\r\n]+=).*)*)/gm '] (https://regex101.com/r/fdlP42/1). Wenn die Schlüssel nur aus Wortzeichen bestehen können, verwenden Sie ['/^(\w+)=(.+(?:\r?\n(?!\w+=).*)*)/gm'](https: //regex101.com/r/fXzJxA/1). Es gibt fertige INI-Parsing-Bibliotheken für Programmiersprachen, aber es ist am besten, eine zu verwenden. –

Antwort

1

konnte Sie:

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

Oder, wenn Sie es mit Config::IniFiles->new(..., -allowcontinue => 1);, Fortsetzungszeilen ermöglichen mit dieser PCRE regex sein:

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

Probieren sie es here.

Dies beruht auf der Abwesenheit der sEinzelleitungsflag, seien Sie vorsichtig, es nicht zu setzen. Das Flag m ist ebenfalls erforderlich, und g lobal kann gegebenenfalls verwendet werden.

Das passt vom Anfang einer Zeile ein Gleichheitszeichen (^.*=.*) enthält, wird dann so viele ganze Zeilen übereinstimmen, es kann nicht ein Gleichheitszeichen enthalten, wie ([^=]*$, wo [^=] wird Zeilenvorschübe zusammenpassen).

0

Sie erscheinen Perl zu verwenden. Haben Sie überlegt, Config::IniFiles zu verwenden? Das Modul wird Griff für Sie INI-Dateien vom Typ Parsen und hat die Unterstützung für mehrzeilige Parameter mit heredoc Syntax:

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

Ich glaube, Sie versuchen, alle ini-Werte zu erhalten, und zu tun, dass Sie diese RegexMuster verwenden können:

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

und Sie können Ihre Werte unter Verwendung von Gruppen zugreifen können, wobei jede Gruppe Sie abruft Schlüssel und Wert

+0

Dies passt nicht zu mehrzeiligen Werten ohne das "single-line" -Flag und passt zu gierig dazu – Aaron