我正在阅读 regex group matching问题,我看到有两种方法可以从正则表达式中引用捕获组,即
- Match字符串方法,例如
string.match(/(^.*)(:)(.*)/i).captures
- 从
if match =~/(^.*)(:)(.*)/i
获取的 Perl-esque 捕获组变量,例如 $1、$2 等 - 更新:如 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/