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

时间:2012-02-03 09:17:36

标签: ruby regex

我想要匹配的格式是:

# (Apple push notification codes)
"11a735e9 9f696c2f 700b2700 728042c6 137eeb7a 8442c27d 40e59d9e 3c7e0de7"

我能想到的最简单的表达方式是:/((\w{8}\s){7}\w{8})/i

有人能想到一个更简单的吗?

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

更新 - 感谢user1096188,我删除了\ d - 这包含在\ w

4 个答案:

答案 0 :(得分:3)

您可以使用\b检测字边界,并使用(?:来阻止捕获组

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

> "11a735e9 9f696c2f 700b2700 728042c6 137eeb7a 8442c27d 40e59d9e 3c7e0de7".match(/((\w{8}\s)+)/)
> $&
 => "11a735e9 9f696c2f 700b2700 728042c6 137eeb7a 8442c27d 40e59d9e 3c7e0de7"

答案 3 :(得分:0)

进一步采用@ zapthedingbat的解决方案,看起来代码只包含十六进制字符(0-9和a-f)和空格。所以你可能会为了准确而牺牲一点简单性。

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

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

修改

事实上,在Ruby中,看起来你应该能够做到:

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