2016-03-28 111 views
1

的次数我有一个像提取字符串之前和之后的关键字符串

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

我想在两个变量后,提取mapping=之前的一切,也都一个字符串。在这条线

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

但是我得到语法错误:
要提取的一切mapping=之前我试过了。
如何正确执行此操作?

+0

这行没有语法错误 – Borodin

+0

@Arnab我想你从行号1得到语法错误,因为你错过了分号。 – mkHun

+0

噢,是的,语法错误是在更早的行中,因为我有一个额外的“)”。但是,$ script_piece1会在您的答案中显示为null。无论如何,我正在尝试你的解决方案,并会尽快回复到这里 – Arnab

回答

2

你的说法是完全有效的,但它会根据$script是否包含字符串mapping=

你需要把正则表达式测试中列表环境设置$script_piece1真正值得到它返回的任何的内容捕获的模式,你也可以像这样一次抓住两个部分

my ($piece1, $piece2) = $script =~ /(.*?)mapping=(.*)/; 

但它的整洁为split,这样

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

只为未来的读者而言,上面应该是 Arnab

+2

@Arnab:不,它不应该。 'm'是可选的,通常被忽略 – Borodin