1

我在 Ruby 中尝试了以下正则表达式:

"the foodogand the catlada are mouseing".scan(/\b(?=\w{6,12}\b)\w{0,9}(cat|dog|mouse)\w*/)

但不是它返回

["foodogand", "catlada", "mouseing"]

我越来越

[["dog"],["cat]]  # the results are also in arrays

这里有什么问题?结果也在数组中,我可以将其展平,但有没有办法避免它?

4

2 回答 2

2

用于?:最后一组:

"the foodogand the catlada are mouseing".scan(/\b(?=\w{6,12}\b)\w{0,9}(?:cat|dog|mouse)\w*/)
#=> ["foodogand", "catlada", "mouseing"]

从文档:

如果模式包含组,则每个单独的结果本身就是一个数组,每个组包含一个条目。

使?:组非捕获,避免嵌套数组。

于 2013-06-14T00:01:10.023 回答
1

\b我会通过将第二个移到最后并替换\w{0,9}\w*(前瞻负责长度)来稍微清理一下

"the foodogand the catlada are mouseing".scan /\b(?=\w{6,12})\w*(?:cat|dog|mouse)\w*\b/
#=> ["foodogand", "catlada", "mouseing"]
于 2013-06-14T00:35:14.537 回答