Ruby 未捕获第二次匹配的正则表达式模式

Ruby 未捕获第二次匹配的正则表达式模式,ruby,regex,Ruby,Regex,我有字符串: Error: heroku 6.14.38 is already installed To upgrade to 7.7.1, run `brew upgrade heroku` 我正在做.slice(/([\d+\.]+)/),它给了我6.14.38,但不是7.7.1 我怎样才能得到它?您可以使用以下方法: 印刷品: 6.14.38 7.7.1 您可以使用以下方法: 印刷品: 6.14.38 7.7.1 . 让我们看看您的代码。可能与的重复。让我们看看你的代码。这可能是我要

我有字符串:

Error: heroku 6.14.38 is already installed
To upgrade to 7.7.1, run `brew upgrade heroku`
我正在做
.slice(/([\d+\.]+)/)
,它给了我
6.14.38
,但不是
7.7.1

我怎样才能得到它?

您可以使用以下方法:

印刷品:

6.14.38
7.7.1
您可以使用以下方法:

印刷品:

6.14.38
7.7.1

. 让我们看看您的代码。可能与的重复。让我们看看你的代码。这可能是我要找的
split
方法返回一个字符串,但如果第一行是
“错误:heroku 6.14.38已经安装。”
将在连续的行上打印以下内容:
“6.14.38”
“7.7.1”
。顺便提一下,周期不需要在字符类中转义。许多在正则表达式中具有特殊含义的字符失去了特殊含义,在字符类中被视为普通字符(
“ab.”[/[.]/].\35;=>“
”、
“a$c”[/[$]/].\35;=>“$”
等等)。谢谢@CarySwoveland,说得好。我已经更正了我的答案,使用表达式
((?:\d+\)++\d+
。这解决了这个问题,尽管它仍然匹配
“1.2.3.4.5.6”
。这可能不是问题,但它看起来不像Heroku版本号。写
/((?:\d\){2}\d+/
)同样容易,为什么不呢?是的,我不知道Heroku数字是什么样子:)这可能就是我要找的
split
方法返回一个字符串,但如果第一行是
“错误:heroku 6.14.38已经安装。”
将在连续的行上打印以下内容:
“6.14.38”
“7.7.1”
。顺便提一下,周期不需要在字符类中转义。许多在正则表达式中具有特殊含义的字符失去了特殊含义,在字符类中被视为普通字符(
“ab.”[/[.]/].\35;=>“
”、
“a$c”[/[$]/].\35;=>“$”
等等)。谢谢@CarySwoveland,说得好。我已经更正了我的答案,使用表达式
((?:\d+\)++\d+
。这解决了这个问题,尽管它仍然匹配
“1.2.3.4.5.6”
。这可能不是问题,但它看起来不像Heroku版本号。写
/((?:\d\){2}\d+/
)同样容易,为什么不呢?是的,我不知道Heroku数字是什么样子:)
str = "Error: heroku 6.14.38 is already installed
To upgrade to 7.7.1, run `brew upgrade heroku`"

r = /
    \d{1,2}  # match one or two digits
    \.       # match decimal
    \d{1,2}  # match two digits
    \.       # match decimal
    \d{1,2}  # match two digits
    .+?      # match any number of characters, lazily
    \K       # discard match so far
    \d{1,2}  # match one or two digits
    \.       # match decimal
    \d{1,2}  # match two digits
    \.       # match decimal
    \d{1,2}  # match two digits
    /xm      # free-spacing regex definition and multiline modes

str[r]
  #=> "7.7.1"