我明白如何檢查字符串中的模式與紅寶石正則表達式。我感到困惑的是如何將字符串中找到的模式保存爲單獨的字符串。Ruby的正則表達式
我以爲我可以這樣說:
if string =~ /regexp/
pattern = string.grep(/regexp/)
,然後我可能會繼續我的生活。但是,這不像預期的那樣工作,並且正在返回整個原始字符串。有什麼建議?
我明白如何檢查字符串中的模式與紅寶石正則表達式。我感到困惑的是如何將字符串中找到的模式保存爲單獨的字符串。Ruby的正則表達式
我以爲我可以這樣說:
if string =~ /regexp/
pattern = string.grep(/regexp/)
,然後我可能會繼續我的生活。但是,這不像預期的那樣工作,並且正在返回整個原始字符串。有什麼建議?
您正在尋找紅寶石string.match()
。
irb(main):003:0> a
=> "hi"
irb(main):004:0> a=~/(hi)/
=> 0
irb(main):005:0> a.match(/hi/)
=> #<MatchData:0x5b6e8>
irb(main):006:0> a.match(/hi/)[0]
=> "hi"
irb(main):007:0> a.match(/h(i)/)[1]
=> "i"
irb(main):008:0>
而且對於你剛纔在如果條件符合,您可以使用$&
$1
.. $9
和$~
爲這樣的工作:
irb(main):009:0> if a =~ /h(i)/
irb(main):010:1> puts("%s %s %s %s"%[$&,$1,$~[0],$~[1]])
irb(main):011:1> end
hi i hi i
=> nil
irb(main):012:0>
您還可以使用特殊變量$ &和$ 1- $ n,如下所示:
if "regex" =~ /reg(ex)/
puts $&
puts $1
end
輸出:
regex
ex
$〜還包含MatchData對象。另見:http://www.regular-expressions.info/ruby.html。
我更喜歡一些快捷鍵,如:
email = "Khaled Al Habache <[email protected]>"
email[/<(.*?)>/, 1] # => "[email protected]"
作品,欣賞它 – Atreides 2009-09-12 03:29:29