我得到的结果和string.scan和几个regex测试程序完全不同…
我只是想从字符串中获取域,这是最后一个词。
所讨论的regex:
/([a-zA-Z0-9\-]*\.)*\w{1,4}$/
字符串(1行,在ruby的运行时btw中验证)
str = 'Show more results from software.informer.com'
工作很好,但在红宝石…
irb(main):050:0> str.scan /([a-zA-Z0-9\-]*\.)*\w{1,4}$/
=> [["informer."]]
我想我会在software.informer.com上找到一个匹配项,这是我的目标。
最佳答案
它看起来不像您期望的结果不止一个(特别是当regex被锚定时)。在这种情况下,没有理由使用scan。
'Show more results from software.informer.com'[ /([a-zA-Z0-9\-]*\.)*\w{1,4}$/ ]
#=> "software.informer.com"
如果确实需要使用scan(在这种情况下,显然需要移除锚),可以使用
(?:)
创建非捕获组。'foo.bar.baz lala software.informer.com'.scan( /(?:[a-zA-Z0-9\-]*\.)*\w{1,4}/ )
#=> ["foo.bar.baz", "lala", "software.informer.com"]