我有一个看起来像的字符串:
hello/world/1.9.2-some-text
hello/world/2.0.2-some-text
hello/world/2.11.0
通过正则表达式,我希望在最后一次获得字符串' /'直到行结束,即在上面的例子中,输出应该是1.9.2-some-text,2.0.2-some-text,2.11.0
我尝试了这个 - ^(.+)\/(.+)$
,它返回了一个数组,其中第一个对象是" hello/world
"第二个对象是" 1.9.2-some-text
"
有没有办法获得" 1.9.2-some-text"作为输出?
答案 0 :(得分:3)
答案 1 :(得分:3)
你可以在这里使用否定的匹配。
'hello/world/1.9.2-some-text'.match(Regexp.new('[^/]+$'))
# => "1.9.2-some-text"
表示任何字符除外:/
( 1 或更多次)后跟字符串的结尾。
虽然,最简单的方法是拆分字符串。
'hello/world/1.9.2-some-text'.split('/').last
# => "1.9.2-some-text"
OR
'hello/world/1.9.2-some-text'.split('/')[-1]
# => "1.9.2-some-text"
答案 2 :(得分:2)
如果您不需要使用正则表达式,那么执行此类操作的常用方法是:
File.basename("hello/world/1.9.2-some-text")
#=> "1.9.2-some-text"
答案 3 :(得分:1)
这是一种方式:
s = 'hello/world/1.9.2-some-text
hello/world/2.0.2-some-text
hello/world/2.11.0'
s.lines.map { |l| l[/.*\/(.*)/,1] }
#=> ["1.9.2-some-text", "2.0.2-some-text", "2.11.0"]
你说,“在上面的例子中,输出应该是1.9.2-some-text, 2.0.2-some-text, 2.11.0
”。那既不是字符串也不是数组,所以我假设你想要一个数组。如果你想要一个字符串,请将.join(', ')
添加到最后。
正则表达式自然是“贪婪的”,因此.*\/
将匹配所有字符,包括每行中的最后一个/
。 1
返回捕获组(.*)
(捕获组1)的内容。