正则表达式对我说谎。但我不确定如何解决它

时间:2014-04-26 19:57:03

标签: ruby regex vimeo

我正在制作并且我最初开始工作,只是因为我很幸运,我测试的视频是有效的。请允许我进一步解释。

我要做的是上传vimeo内容。通常在vimeo的url中,数字部分由7或8位数组成,我试图捕获它们并将它们放在我的show和index.html中。我最初使它工作,我认为它是完全正常的,但当我尝试上传更多视频时,事实证明我的模型文件或索引中的正则表达式只允许捕获一个数字。一开始,视频会播放,因为一个数字的网址恰好有效。所以我想知道的是我做错了什么。我尝试了一些关于rubular的东西,但我怀疑我想出的正则表达式没有做我认为他们正在做的事情。这就是我所拥有的:

validates :url_id, format: { with: /\Ahttp:\/\/vimeo.com\/\d+/ }
validates :url_id, format: { with: /\Ahttp:\/\/vimeo.com\/\d{7,8}/ }

上面的代码在我的模型文件中。第一行代码应该可行。我希望用户以这种格式复制粘贴网址,并且因为vimeo网址在其网址中有7或8位数字,这应该验证网址(我认为,Rubular确认了它)。

在我的index.html和show.html中,我有这个:

<iframe src="http://player.vimeo.com/video/<%=/[0-9]/.match(music_video.url_id)%>"

将[0-9]放在rubular中告诉我它应该捕获url中的所有数字,但它只捕获一个数字,即第一个数字。我错过了什么吗? \ d +做了我不知道的事情吗?

2 个答案:

答案 0 :(得分:2)

正则表达式101:

[0-9]    matches a single character, which must consist of the digits 0 through 9
[0-9]+   matches 1 or more characters, all of which must be the digits 0 through 9
[0-9]*   matches 0 or more characters, all of which must be the digits 0 through 9
[0-9]{n,m} matches at least 'n' chars, up to 'm' chars, all which must be 0 through 9
[0-9]{n,} matches at least 'n', with no upper limit, etc...
[0-9]{,m} matches at MOST 0 up to 'm' worth of characters.

意味着以下等同物:

[0-9]          [0-9]{1}
[0-9]*         [0-9]{0,}
[0-9]+         [0-9]{1,}

\d是一种便利,一种等同于[0-9]的快捷方式,仅仅意味着&#34;数字&#34;。

答案 1 :(得分:0)

Rubular将突出显示匹配的所有序列。在您的示例中,它看起来与匹配所有数字的整数相匹配。如果你把([0-9])作为你的模式用于rubular,你会很容易理解这一点。