我得到的结果和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"]

09-12 10:54