2010-08-18 12 views
0

我已經在一個文件下面的字符串名爲mib.txt:獲取線路匹配正則表達式

[name=1.3.6.1.2.1.1.5.0, value=myrouter.ad.local (OCTET STRING)] 

名稱下面的代碼:

f = File.read("/temp/mib.txt") 
name = f.match(/1.3.6.1.2.1.1.5.0/) 
puts "device name is #{name}" 

它返回1.3.6.1.2.1.1.5.0就像我問到,但我真正想要的是找到包含1.3.6.1.2.1.1.5.0的字符串,並解析myrouter的值。

+0

將來,請使用四個空格縮進代碼,使代碼看起來像代碼。 – 2010-08-19 00:19:36

回答

1

您必須擴展您的正則搭上了正則表達式組內的值。

s = File.read("/temp/mib.txt") 
m = s.match /\[name=1.3.6.1.2.1.1.5.0, value=([\S]+) \(OCTET STRING\)/ 
puts "device name is #{m[1]}" 
+0

謝謝你的支持者 – rahrahruby 2010-08-18 17:01:29

+0

你的例子很好,但我只想要我的路由器。你給我my-router.ad.local。我試圖修改m = s.match /\\[name=1.3.6.1.2.1.1.5.0,value =([\ S] +)\\(OCTET STRING \\)/ m = s.match /\\[name=1.3.6.1.2.1.1.5.0,value =([\ S] +)\ .ad.local /但不起作用 – rahrahruby 2010-08-18 17:25:48

+0

您也可以使用正則表達式,但我會建議您使用第二行代碼從域中過濾主機名。只需使用示例波紋管。 name = m [1] .split('。')[0] – hgf 2010-08-18 17:46:15

1

你總是可以使用scan

>> name = f.scan(/1.3.6.1.2.1.1.5.0, value=(\w+)/).flatten.to_s 
=> "myrouter" 

如果你想在ad.local部分爲好,則不用做:

>> name = f.scan(/1.3.6.1.2.1.1.5.0, value=([\w\.]+)/).flatten.to_s 
=> "myrouter.ad.local" 
+0

感謝您的幫助 – rahrahruby 2010-08-18 16:51:17

+0

當然,沒問題! – 2010-08-18 16:56:24

+0

如果字符串看起來像這樣[name = 1.3.6.1.2.1.1.5.0,value = my-router.ad.local(OCTET STRING),它不會得到我的路由器。我敢肯定,因爲正則表達式需要改變以包含多於([\ w \。] +)/),你能告訴我什麼我需要添加以獲得「value =」和.ad之間的所有內容。本地。謝謝 – rahrahruby 2010-08-18 16:56:57