Ruby 如何简化这个正则表达式?

Ruby 如何简化这个正则表达式?,ruby,regex,Ruby,Regex,我尝试匹配的格式是: # (Apple push notification codes) "11a735e9 9f696c2f 700b2700 728042c6 137eeb7a 8442c27d 40e59d9e 3c7e0de7" 我能想到的最简单的表达式是:/(\w{8}\s){7}\w{8})/I 有人能想出一个更简单的吗 (我正在使用Ruby正则表达式) 更新-由于用户1096188,我已删除\d-这包含在\w中。如果匹配的结尾是整个字符串的结尾,则可以执行此操作。 (\w{8}(

我尝试匹配的格式是:

# (Apple push notification codes)
"11a735e9 9f696c2f 700b2700 728042c6 137eeb7a 8442c27d 40e59d9e 3c7e0de7"
我能想到的最简单的表达式是:
/(\w{8}\s){7}\w{8})/I

有人能想出一个更简单的吗

(我正在使用Ruby正则表达式)


更新-由于用户1096188,我已删除\d-这包含在\w

中。如果匹配的结尾是整个字符串的结尾,则可以执行此操作。
(\w{8}(:?\s}$){7}

您可以使用
\b
检测单词边界,并使用
(?:
防止捕获组

/(?:\w{8}\b\s?){8}/

将@zapthedingbat的解决方案进一步考虑,代码似乎只包含十六进制字符(0-9和a-f)和空格。因此,为了精确,您可能会牺牲一些简单性

我在做一个假设,但我怀疑字母g到z是无效的。 如果格式仅为十六进制(您应该查看苹果的文档以确定),则更严格的匹配是:

/(?:[0-9a-f]{8}\b\s?){8}/
编辑

事实上,在Ruby中,您应该能够:

/(?:\h{8}\b\s?){8}/

\w同时捕获字母和数字,您不需要[\w\d]啊-粉碎!谢谢:)您也不需要结尾的i,因为\w匹配大写和小写字母。您可以在括号中添加?:这样它就不会捕获反向引用。还有,你不需要“^”和“$”吗?是的,严格地说。这是我现在拥有的最好的:
/^(\w{8}(\s}$){8}/
似乎很管用:)Ruby scan()和match()方法在比较带括号的正则表达式时返回嵌套数组。我希望有更简单的东西-正则表达式不是我的强项,我已经从这个问题中学到了3到4件事-这就是为什么我问:)在Ruby正则表达式中,
$
不是字符串的结尾,而是一行的结尾。字符串的结尾是
\z
。请参见.减去i
/(?:\w{8}\b\s?{8}/
:)谢谢,i不是必需的,因为\w匹配任何情况。已编辑。这也将匹配
“11a735e99f696c2f700b2700728042c6137eeb7a8442c27d40e59d9e3c7e0de7”
-空格不是可选的谢谢您的建议-我不确定它是十六进制还是随机字符串。。。不过我会查一查
/(?:\h{8}\b\s?){8}/