2016-03-28 138 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

相關問題