2016-03-28 13 views
1

Ich habe eine Zeichenfolge wieExtract Saiten vor und nach dem Auftreten einer Schlüsselfolge

$script = "mycommand param1=arnab user=user1 mapping=arn1:schema1,arn2:schema2" 

Ich möchte in zwei Variablen, nachdem er alles vor mapping= und auch alles extrahieren.
alles zu extrahieren, bevor mapping= ich versuche:

$script_piece1 = $script =~ m/(.*)mapping=/; 

jedoch an dieser Linie Ich erhalte Syntaxfehler.
Wie mache ich das richtig?

+0

Diese Linie hat keine Syntaxfehler – Borodin

+0

@Arnab Ich glaube, Sie den Syntaxfehler erhalten aus Zeilennummer 1. Da Sie das Semikolon verpasst. – mkHun

+0

Oh Ja, der Syntaxfehler war in einer früheren Zeile, weil ich ein extra ")" hatte. Aber das $ script_piece1 kommt als Null, anders als Sie in Ihrer Antwort unten gesagt haben. Jedenfalls probiere ich Ihre Lösung aus und werde bald hier posten – Arnab

Antwort

2

Ihre Aussage ist vollkommen gültig, aber es wird $script_piece1 zu einem wahr oder falsch Wert je nachdem, ob $script enthält die Zeichenfolge mapping=

Sie müssen die regex Test in Liste Kontext setzen zu erhalten sie den Inhalt aller erfasst im Muster zurückzukehren, und Sie können wie folgt

my ($piece1, $piece2) = $script =~ /(.*?)mapping=(.*)/; 
012 sofort auch beide Teile greifen

Aber es ist ordentlicheres als split, wie dieser

my ($piece1, $piece2) = split /mapping=/, $script, 2; 
+0

Nur für die zukünftigen Leser, die oben sollte Arnab

+2

@Arnab: Nein, sollte es nicht. Das "m" ist optional und wird normalerweise weggelassen – Borodin

Verwandte Themen