2015-08-08 66 views
-2

我有兩個字符串:紅寶石代替數組列表

packages="­linux-imag­e-3.2.0-4-­amd64 linux­-libc-dev linux­-headers-3­.2.0-4-amd­64 linux­-headers-3­.2.0-4-com­mon dnsutils mysql-server-5.5" 
exclusion="dnsutils mysql-server-5.5" 

我需要一個字符串pkgs擁有的packages沒有exclusion像這樣的內容:

pkgs="­linux-imag­e-3.2.0-4-­amd64 linux­-libc-dev linux­-headers-3­.2.0-4-amd­64 linux­-headers-3­.2.0-4-com­mon" 

我嘗試下面的代碼:

pkgs = packages.gsub!(/(?<!^|,)#{exclusion}(?!,|$)/, '\1') 

似乎沒有工作。這種情況下最好的解決方案是什麼?

+0

來自packages變量,我想排除排除變量中的字符串。 – laguna

回答

0
packages="linux-image-3.2.0-4-amd64 linux-libc-dev linux-headers-3.2.0-4-amd64 linux-headers-3.2.0-4-common dnsutils mysql-server-5.5" 
exclusion="dnsutils mysql-server-5.5" 
(packages.split - exclusion.split).join(" ") # => "linux-image-3.2.0-4-amd64 linux-libc-dev linux-headers-3.2.0-4-amd64 linux-headers-3.2.0-4-common" 
+0

做到了!謝謝 – laguna

0

如果你想保持簡單,你總是可以將這些字符串拆分爲數組,並加入差異。

(packages.split - exclusion.split).join ' ' 

字符串的split方法將默認爲空格字符。這給你兩個數組,你可以從第一個數組中減去第一個和第二個數組中存在的任何值。然後你可以用空格字符join這個新數組。

更長的例子:

packages="linux-image-3.2.0-4-amd64 linux-libc-dev linux-headers-3.2.0-4-amd64 linux-headers-3.2.0-4-common dnsutils mysql-server-5.5" 
exclusion="dnsutils mysql-server-5.5" 


one = packages.split 
# >> ["linux-image-3.2.0-4-amd64", "linux-libc-dev", "linux-headers-3.2.0-4-amd64", "linux-headers-3.2.0-4-common", "dnsutils", "mysql-server-5.5"] 

two = exclusion.split 
# >> ["dnsutils", "mysql-server-5.5"] 

difference = one - two 
# >> ["linux-image-3.2.0-4-amd64", "linux-libc-dev", "linux-headers-3.2.0-4-amd64", "linux-headers-3.2.0-4-common"] 

finished = difference.join ' ' 
# >> "linux-image-3.2.0-4-amd64 linux-libc-dev linux-headers-3.2.0-4-amd64 linux-headers-3.2.0-4-common" 
+0

這個解決方案的解釋是什麼? – laguna

+0

這個解釋有幫助嗎? – Oka

+0

是的,它有幫助..謝謝 – laguna

0

你需要你的變量是數組,而不是字符串。然後,你可以使用-運營商從packages爲「減」在exclusion項目:

packages = [ "­linux-imag­e-3.2.0-4-­amd64", 
      "linux­-libc-dev", 
      "linux­-headers-3­.2.0-4-amd­64", 
      "linux­-headers-3­.2.0-4-com­mon", 
      "dnsutils", 
      "mysql-server-5.5" ] 

exclusion = [ "dnsutils", "mysql-server-5.5" ] 

remaining = packages - exclusion 
# => [ "­linux-imag­e-3.2.0-4-­amd64", 
#  "linux­-libc-dev", 
#  "linux­-headers-3­.2.0-4-amd­64", 
#  "linux­-headers-3­.2.0-4-com­mon" ] 

如果再需要一個字符串值,與join方法將它們連接在一起:

remaining_str = remaining.join(" ") 
# => "­linux-imag­e-3.2.0-4-­amd64 linux­-libc-dev linux­-headers-3­.2.0-4-amd­64 linux­-headers-3­.2.0-4-com­mon"