红宝石相当新鲜。我正在尝试解析一个字符串并使用正则表达式分配几个变量。
我已经查阅了文档,谷歌搜索了一下,并且非常确定以下内容应该有效。
@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
我试图以错误的方式做到这一点吗?
答案 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+