红宝石正则表达式测试字符串的完全匹配

时间:2018-11-04 02:29:54

标签: ruby regex

如果字符串是mongo id,而不是字符串包含mongo id,我想编写一个正则表达式以使其完全匹配。我的mongo ID正则表达式是

/[a-z,0-9]{24}/

效果很好,但是例如,我无法弄清楚如何编写一个拒绝包含mongo id的URL的正则表达式。所以,我得到了,这不是我想要的:

pattern = /[a-z,0-9]{24}/
str1 = "589ab375c3c6416310171b5b"
str2 = "http://somewhere.com/589ab375c3c6416310171b5b?review"
str1.match pattern

输出:

#<MatchData "589ab375c3c6416310171b5b">

第二个字符串

str2.match pattern

输出:

#<MatchData "589ab375c3c6416310171b5b">

我希望第一个匹配,而第二个不匹配。

感谢您的帮助, 凯文

2 个答案:

答案 0 :(得分:2)

对于示例数据,您可以使用anchors \A\z。数据不包含逗号,因此您可以从character class中忽略它。

例如:

pattern = /\A[a-f0-9]{24}\z/

Demo

答案 1 :(得分:1)

您可以使用^$来精确匹配整个字符串。 ^匹配行的开始,$匹配行的结束。所以:

/^[a-z,0-9]{24}$/

将匹配仅包含Mongo ID的24个字符的字符串。