为什么sub只用正则表达式替换一个字符?

arc*_*hie 0 ruby regex

我想从字符串中删除所有非数字字符. /\D/是一个非数字字符([^0-9]):

irb(main):010:0> s = "(123) 456-7890"
=> "(123) 456-7890"
irb(main):011:0> s.sub( /\D*/, '' )
=> "123) 456-7890"
Run Code Online (Sandbox Code Playgroud)

Aru*_*hit 5

使用String#tr或执行以下操作String#gsub:

s.gsub(/[[:punct:]]|[[:space:]]/ ,'')
# => "1234567890" 
s.tr('^0-9','') # even more faster
# => "1234567890" 
Run Code Online (Sandbox Code Playgroud)