2016-03-28 25 views
1

ortaya çıkmasında önce ve sonra ben iki değişken de ondan sonra mapping= önce her şeyi ve ayrıca her şeyi ayıklamak istiyorumÖzü dizeleri anahtar dize

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

gibi bir dize var. Denedim mapping= önce
şeyi ayıklamak için:

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

Ancak alıyorum sözdizimi hatası bu çizgide.
Bu nasıl doğru yapılır?

+0

Bu çizgi gibi bir split olarak kıvrımlara olan bir sözdizimi hatası – Borodin

+0

@Arnab yok i virgül cevapsız Çünkü hat numarasına 1. sözdizimi hatası alıyorum düşünüyorum. – mkHun

+0

Oh Evet, Sözdizimi hatası daha önceki bir satırdaydı çünkü fazladan bir ") vardı. Ama $ script_piece1 aşağıdaki cevabınızda söylediğinden farklı olarak null olarak geliyor. Her neyse, ben senin çözümünü denedim ve yakında geri gönderecek – Arnab

cevap

2

İfadende tamamen geçerli olduğunu, ancak $scriptmapping=

Sen listeye bağlam için regex testi koymak gerekir dize içerip içermediğini göre bir gerçek veya yanlış değere $script_piece1 ayarlayacaktır o desende herhangi yakalar içeriğini dönmek için olsun, ve siz de bu

my ($piece1, $piece2) = $script =~ /(.*?)mapping=(.*)/; 
012 gibi bir kerede iki parçayı alabilecek

Ama bu

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

Sadece gelecekteki okuyucular için, yukarıdaki Arnab

+2

@Arnab: Hayır, yapmamalı. 'M' isteğe bağlıdır ve genellikle ihmal edilir – Borodin