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"