Ruby - 提取正则表达式捕获组的最佳方式?

标签 ruby regex

我正在阅读 regex group matching问题,我看到有两种方法可以从正则表达式中引用捕获组,即

  1. Match字符串方法,例如string.match(/(^.*)(:)(.*)/i).captures
  2. if match =~/(^.*)(:)(.*)/i 获取的 Perl-esque 捕获组变量,例如 $1、$2 等
  3. 更新:如 0xCAFEBABE 所述,还有第三种选择 - last_match方法

哪个更好?对于 1),为了安全起见,您将不得不使用 if 语句来防止 nils,那么为什么不直接提取信息呢?而不是第二步调用字符串捕获方法。所以选项 2) 对我来说看起来更方便。

最佳答案

从 v2.4.6 开始,Ruby 有 named_captures ,可以这样使用。只需添加 ?<some_name>捕获组内的语法。

/(\w)(\w)/.match("ab").captures # => ["a", "b"]
/(\w)(\w)/.match("ab").named_captures # => {}

/(?<some_name>\w)(\w)/.match("ab").captures # => ["a"]
/(?<some_name>\w)(\w)/.match("ab").named_captures # => {"some_name"=>"a"}

更重要的是,您可以按名称引用命名捕获!

result = /(?<some_name>\w)(\w)/.match("ab")
result["some_name"] # => "a" 

关于Ruby - 提取正则表达式捕获组的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17743858/

相关文章:

ruby - 为什么我的回文检测器不工作(只返回一个输入)?

ruby-on-rails - 无法访问 http_basic block 内的任何 Grape::API 方法/对象

Ruby on Rails - 在哪里放置这些辅助类型方法

python - Regex sub 仅删除某些表达式

Javascript 正则表达式没有返回正确的结果

ruby-on-rails - 使空白参数[]为零

ruby-on-rails - Ruby on Rails 协会表格

python - html 标签中的正则表达式

regex - 在 .m 文件的开头查找特定字符

java - URL参数字符串的正则表达式java