2013-10-16 79 views
0

我有這樣正則表達式選擇兩個詞和修剪一切

SNMPv2-SMI::enterprises.6889.2.69.5.1.58.0 = IpAddress: 10.169.130.48 SNMPv2-SMI::enterprises.6889.2.69.5.1.52.0 = STRING: "999" 

一條線,我想選擇的IP地址(10.169.130.48)和字符串輸出(999)和修剪一切,我使用此代碼。

/.*\s=\sIpAddress:\s(\d+\.\d+\.\d+\.\d+)\sSNMPv2-SMI.*\s=\sSTRING:\s\"(\d+)\"/ 

但我只得到10.169.130.48不是輸出的字符串。我的問題是我不能使用兩個()來選擇我想要的?另一種選擇是什麼?

+0

使用這個正則表達式的工具/語言? – anubhava

+0

以及您使用什麼代碼輸出第二個參數 – jeremy

+0

爲什麼您對可以使用多少匹配組(parens)有限制?如果您試圖在字符串內匹配兩個不同的模式,則需要兩個匹配的組。 –

回答

1

你的正則表達式是正確的,你只是缺少結果存取第二捕獲。 Check this out尋求解決方案!

0

繼正則表達式的作品在Javascript:

var s = 'SNMPv2-SMI::enterprises.6889.2.69.5.1.58.0 = IpAddress: 10.169.130.48 SNMPv2-SMI::enterprises.6889.2.69.5.1.52.0 = STRING: "999"' 

var m = s.match(/\bIpAddress:\s*([^\s]+).*?\bSTRING:\s*([^\s]+)/); 
// m[1] = 10.169.130.48 
// m[2] = "999" 
1

你的正則表達式是罰款。唯一的問題是,在Perl中,你不需要轉義雙引號字符。由於正斜槓符號不被解釋爲字符串。

您可以通過$ 2

+0

我同意逃跑沒有必要,但是會影響正則表達式的結果嗎?或者他的問題還有別的嗎? –

+0

打印「$ 1 $ 2」;訣竅!謝謝!! – user1396982