2012-07-06 39 views
0

對於ruby來說相當新穎。我試圖解析一個字符串,並用正則表達式分配幾個變量。Ruby正則表達式匹配來自單個字符串的多個變量

我已經諮詢了文檔,Google搜索了一下,並確信以下內容可以正常工作。

@operating_system, @os_update, @os_arch = @version_line[0].match(
     /(Solaris \d+)\s+\d+\/\d+\ss\d+[sx]_u(\d+)\wos_\d+\w+\s+(\w+)$/ 
     ) 

@version_line = [" Oracle Solaris 10 9/10 s10x_u9wos_14a X86\n"]

但所發生的一切是我的第一個變量,@operating_system分配Solaris 10 9/10 s10x_u9wos_14a X86

難道我嘗試做了錯誤的方式?

回答

1

其實,match返回MatchData對象,這恰好有一個to_s方法產生你看到的字符串。

要獲得所有匹配的捕捉組作爲一個數組,使用captures方法:

@operating_system, @os_update, @os_arch = @version_line[0].match(
     /(Solaris \d+)\s+\d+\/\d+\ss\d+[sx]_u(\d+)\wos_\d+\w+\s+(\w+)$/ 
     ).captures 
+0

奇怪...'字符串#我match'工作。這是在1.8.7以及1.9.1和1.9.3的文檔 – 2012-07-06 12:00:31

+0

輝煌!謝謝托馬斯我完全錯過了匹配返回MatchData對象的事實! – Sirch 2012-07-06 12:19:54

+0

你說得對@version_line = [「...」],我會編輯我的問題。 – Sirch 2012-07-06 12:22:31

0

使用這個表達式(Solaris \d+)\s+\d+/\d+\s\w+\s\w+