交替给出了意想不到的结果

时间:2014-02-02 11:21:46

标签: ruby regex alternation

在Ruby中,尝试从长字符串中提取一些模式,并将每个匹配的模式放入一个字符串数组中。例如,长字符串输入可以是

"\"/ebooks/1234.pdf\"  \"/magazines/4321.djvu\""

预期结果是

["/ebooks/1234.pdf", "/magazines/4321.djvu"]

这是一个正斜杠,其次是三个关键词之一:电子书,杂志或报纸,然后是另一个正斜杠,接着是除双引号之外的任意数量的非空格字符。

使用交替(管道垂直条)尝试此模式,但失败了:

/\/(ebooks|magazines)\/[^\s"]+/

这给出了这个结果:

[["ebooks"], ["magazines"]]

正确的模式应该是什么?

1 个答案:

答案 0 :(得分:1)

"\"/ebooks/1234.pdf\"  \"/magazines/4321.djvu\""
.scan(/\/(?:ebooks|magazines|newspapers)\/[^\s"]+/)
# => ["/ebooks/1234.pdf", "/magazines/4321.djvu"]

"\"/ebooks/1234.pdf\"  \"/magazines/4321.djvu\""
.scan(/"([^"]+)"/).flatten
# => ["/ebooks/1234.pdf", "/magazines/4321.djvu"]