0

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

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

@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

我试图以错误的方式去做吗?

4

2 回答 2

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
于 2012-07-06T11:52:42.500 回答
0

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

于 2012-07-06T11:52:41.213 回答