字符串精确匹配的ruby正则表达式测试

字符串精确匹配的ruby正则表达式测试,ruby,regex,Ruby,Regex,我正在尝试编写一个正则表达式,以完全匹配字符串是否为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"

我正在尝试编写一个正则表达式,以完全匹配字符串是否为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">
#<MatchData "589ab375c3c6416310171b5b">
输出:

#<MatchData "589ab375c3c6416310171b5b">
#<MatchData "589ab375c3c6416310171b5b">
#
我希望第一个匹配,但第二个不匹配

谢谢你的帮助,
kevin

您可以使用
^
$
精确匹配整个字符串
^
匹配行首,
$
匹配行尾。因此:

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

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

您可以使用
^
$
精确匹配整个字符串
^
匹配行首,
$
匹配行尾。因此:

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

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

对于示例数据,您可以使用
\a
\z
。数据不包含逗号,因此您可以从中省略该逗号

例如:

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


对于示例数据,您可以使用
\A
\z
。数据不包含逗号,因此您可以从中省略该逗号

例如:

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


旁注,如果您实际上不需要匹配数据,只需要一个关于反射是否匹配的布尔值,请使用
match?
。它更高效,因为它不生成MatchData对象或构建BackRef($1、$2、$3等)。请注意,如果您实际上不需要匹配数据,而只需要一个关于反射是否匹配的布尔值,请使用
匹配?
。它更高效,因为它不会生成MatchData对象或构建backref($1、$2、$3等)。
\a
(字符串开头)和
\z
(字符串结尾)可能是更好的锚定,因为您的锚定将匹配
”http://somewhere.com/\n589ab375c3c6416310171b5b\n?查看“
\A
(字符串开头)和
\z
(字符串末尾)可能是更好的锚点,因为您的锚点将匹配
”http://somewhere.com/\n589ab375c3c6416310171b5b\n?查看“