Ruby:正则表达式中的十六进制

Posted

技术标签:

【中文标题】Ruby:正则表达式中的十六进制【英文标题】:Ruby: hexadecimal in regular expressions 【发布时间】:2011-10-03 04:44:52 【问题描述】:

我需要在 Ruby(实际上是 Rails)程序的正则表达式中匹配 md5 校验和。我在某处发现可以将十六进制字符串与\h 序列匹配,但我再也找不到链接了。

我正在使用该序列,并且我的代码在 Ruby 1.9.2 中运行。即使在普通的 IRB 下我也可以让它工作(所以它不是 Rails 扩展)。

ruby-1.9.2-p180 :007 > "123abcdf" =~ /^\h+$/; $~
 => #<MatchData "123abcdf"> 
ruby-1.9.2-p180 :008 > "123abcdfg" =~ /^\h+$/; $~
 => nil 

但是我的 IDE 将该表达式标记为错误,并且我找不到任何引用该序列的参考。

在任何环境/版本下,Ruby Regex 中的 \h 序列是否合法,还是我应该相信我的 ide 并将其替换为 [abcdef\d] 之类的东西?

【问题讨论】:

你应该检查 /\A\h+\Z/ 见sakurity.com/blog/2015/06/04/mongo_ruby_regexp.html 【参考方案1】:

是的。查看 the official doc 以获取 Ruby 中正则表达式的完整文档。

注意\h也会匹配大写字母,所以它实际上等价于[a-fA-F\d]

【讨论】:

完美,正是我所需要的。感谢您的回答。 一个小注释——它也会匹配整数,所以整个类是 [a-fA-Z0-9]。 @jdc: \d[0-9] 相同 “这个 SO 答案”的链接不再有效:***.com/questions/4160739/…。【参考方案2】:

根据this,\h 是 oniguruma 的一部分,我相信这是 ruby​​ 1.9 中的标准。

【讨论】:

以上是关于Ruby:正则表达式中的十六进制的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式从 Ruby 中的字符串中提取子字符串

是否有正则表达式的通用/标准子集?

什么是 '?-mix' 在 Ruby 正则表达式中

ruby 正则表达式

MarkLogic 的 xQuery 中的正则表达式

Ruby 正则表达式