簡體   English   中英

如何在Ruby中測試正則表達式並獲取匹配的部分?

[英]How can I test regexp and fetch matching parts in Ruby?

我有一個輸入,可以有不同的結構。 我想測試幾種模式,並在每種情況下獲得相應的匹配部分,而無需重復正則表達式。 例如:

a = "hello123"
case a
when /^([0-9]+)([a-z]+)$/
  # how to get matching values?
when /^([a-z]+)([0-9]+)$/
  # how to get matching values?
else
end

這是一個非常簡單的示例,我的代碼稍微復雜一些。

$~

a = "hello123"
case a
when /^([0-9]+)([a-z]+)$/
  print $~
when /^([a-z]+)([0-9]+)$/
  print $~
else
end

將打印MatchData對象。 (MatchData是特殊變量$〜的類型,是Regexp#match和Regexp#last_match返回的對象的類型。它封裝了模式匹配的所有結果,通常通過特殊變量$&,$訪問該結果',$`,$ 1,$ 2( 更多有關特殊變量的信息 ),依此類推。Matchdata也稱為MatchingData。)

http://ruby-doc.org/core/classes/Regexp.html#M001202

a = "hello123"
case a
when /^([0-9]+)([a-z]+)$/
  # how to get matching values?
  puts [$~, $1, $2]
when /^([a-z]+)([0-9]+)$/
  print "regex 2 matched "
  p [$1, $2]                    # => ["hello", "123"]
  p $~.to_a                     # => ["hello123", "hello", "123"]
else
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM