Ruby Regex Match从单个字符串中匹配多个变量

时间:2012-07-06 11:46:40

标签: ruby regex

红宝石相当新鲜。我正在尝试解析一个字符串并使用正则表达式分配几个变量。

我已经查阅了文档,谷歌搜索了一下,并且非常确定以下内容应该有效。

@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

我试图以错误的方式做到这一点吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用此正则表达式(Solaris \d+)\s+\d+/\d+\s\w+\s\w+