2013-01-14 53 views
0

我在Ruby(on Rails)中遇到了正則表達式問題。我對此比較陌生。Ruby中的正則表達式:找不到表達式

測試字符串是: http://www.xyz.com/017010830343 $ ProdLarge $

我試圖消除 「$ ProdLarge $」?換句話說,$符號和之間的任何東西。

我的正則表達式爲: \ $ \ w + \ $

Rubular說我的表情就可以了。 http://rubular.com/r/NDDQxKVraK

但是當我運行我的代碼時,應用程序表示它沒有找到匹配項。代碼如下:

some_array.each do |x| 
    logger.debug "scan #{x.scan('\$\w+\$')}" 
    logger.debug "String? #{x.instance_of?(String)}" 

    x.gsub!('\$\w+\$','scl=1') 

    ... 

我的記錄器調試行顯示「[]」的結果。字符串被確認爲是真的。而gsub線沒有任何作用。

我需要糾正什麼?

+0

你正在傳遞一個字符串*包含*正則表達式,而不是實際的正則表達式。 –

回答

5

使用/regex/而不是'regex'

> "http://www.xyz.com/017010830343?$ProdLarge$".gsub(/\$\w+\$/, 'scl=1') 
=> "http://www.xyz.com/017010830343?scl=1" 
+0

謝謝 - 現在有道理 – bigwinner

2

不要使用正則表達式完成這個任務,使用爲它設計的,URI的工具。要刪除查詢:

require 'uri' 

url = URI.parse('http://www.xyz.com/017010830343?$ProdLarge$') 
url.query = nil 

puts url.to_s 
=> http://www.xyz.com/017010830343 

要切換到不同的查詢使用這種替代url.query = nil:如果有必要

url.query = 'scl=1' 

puts url.to_s 
=> http://www.xyz.com/017010830343?scl=1 

URI會自動編碼值,節省您的麻煩。如果您需要更多URL管理功能,請查看Addressable::URI

+0

謝謝。我沒有意識到URI非常方便。在這個特定的應用程序中,我相信需要使用某種形式的正則表達式,因爲查詢實際上可能比這裏的示例複雜得多。但我會把它應用到某個地方。 – bigwinner

+0

除非你展示你對抗的準確例子,否則我們無法幫助你。通過編輯將其他示例添加到原始問題中。 –