# Which is better?

**URL:** <https://www.ruby-forum.com/t/which-is-better/179978>\
**Category:** Ruby\
**Created:** [December 9, 2009, 4:11am UTC](https://www.ruby-forum.com/t/which-is-better/179978 "2009-12-09T04:11:15Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![rubynut](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/8e8cbc/32.png) [@rubynut](https://www.ruby-forum.com/u/rubynut)\
**Post date:** [December 9, 2009, 4:11am UTC](https://www.ruby-forum.com/t/which-is-better/179978/1 "2009-12-09T04:11:15Z")

</div>

Hi,

I want to delete the numbers in a string, for example,

x=“abcd1234”

I have two ways:

x.gsub! /\d+/,""

x[/\d+/]=""

Which one is better?  
I personally prefer the second one.

Thanks.

---

<div class="post-metadata">

**Author:** ![rubynut](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/8e8cbc/32.png) [@rubynut](https://www.ruby-forum.com/u/rubynut)\
**Post date:** [December 9, 2009, 4:21am UTC](https://www.ruby-forum.com/t/which-is-better/179978/2 "2009-12-09T04:21:47Z")

</div>

On Wed, Dec 9, 2009 at 11:10 AM, Ruby N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> x.gsub! /\d+/,“”
> 
> x[/\d+/]=“”

try also String#delete

---

<div class="post-metadata">

**Author:** ![rubynut](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/8e8cbc/32.png) [@rubynut](https://www.ruby-forum.com/u/rubynut)\
**Post date:** [December 9, 2009, 5:05am UTC](https://www.ruby-forum.com/t/which-is-better/179978/3 "2009-12-09T05:05:41Z")

</div>

On Dec 8, 2009, at 11:40 PM, Ruby N. wrote:

> x[/\d+/]=""
> 
> Which one is better?  
> I personally prefer the second one.

The first. It doesn’t fail if the string contains no numbers:

x =“abcd”

x[/\d+/]=""  
IndexError: regexp not matched  
from (irb):10:in `[]=' from (irb):10 from /usr/local/bin/irb19:12:in`’

Regards,  
Florian

---

<div class="post-metadata">

**Author:** ![rubynut](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/8e8cbc/32.png) [@rubynut](https://www.ruby-forum.com/u/rubynut)\
**Post date:** [December 10, 2009, 10:16am UTC](https://www.ruby-forum.com/t/which-is-better/179978/4 "2009-12-10T10:16:17Z")

</div>

2009/12/9 Florian G. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > 
> 
> x =“abcd”
> 
> x[/\d+/]=“”  
> IndexError: regexp not matched  
> from (irb):10:in `[]=' from (irb):10 from /usr/local/bin/irb19:12:in `’

And then there’s also

irb(main):001:0\> “123ab”.tr “0-9”, “”  
=\> “ab”  
irb(main):002:0\> “123ab”.tr! “0-9”, “”  
=\> “ab”

Cheers

robert

---

<div class="post-metadata">

**Author:** ![rubynut](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/8e8cbc/32.png) [@rubynut](https://www.ruby-forum.com/u/rubynut)\
**Post date:** [December 10, 2009, 10:58am UTC](https://www.ruby-forum.com/t/which-is-better/179978/5 "2009-12-10T10:58:26Z")

</div>

2009/12/10 Wybo D. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> irb
> 
> > > $-w=true  
> > > =\> true  
> > > “abcd1234”.gsub! /\d+/,‘’  
> > > (irb):13: warning: ambiguous first argument; put parentheses or even spaces  
> > > =\> “abcd”  
> > > “123ab”.tr! “0-9”,“”  
> > > =\> “ab”
> 
> what is the ambiguity in the first case, and why is there no warning in the  
> second case?

Seems to be related to the regexp:

10:56:19 $ ruby19 -wce ‘o.gsub! /\d/, “”’  
-e:1: warning: ambiguous first argument; put parentheses or even spaces  
Syntax OK  
10:56:42 $ ruby19 -wce ‘o.gsub! “d”, “”’  
Syntax OK  
10:56:50 $ ruby19 -wce ‘o.gsub!(/\d/, “”)’  
Syntax OK  
10:57:01 $

Why? No idea.

Cheers

robert

---

<div class="post-metadata">

**Author:** ![rubynut](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/8e8cbc/32.png) [@rubynut](https://www.ruby-forum.com/u/rubynut)\
**Post date:** [December 10, 2009, 10:50am UTC](https://www.ruby-forum.com/t/which-is-better/179978/6 "2009-12-10T10:50:49Z")

</div>

Robert K. wrote:

> And then there’s also
> 
> irb(main):001:0\> “123ab”.tr “0-9”, “”  
> =\> “ab”  
> irb(main):002:0\> “123ab”.tr! “0-9”, “”  
> =\> “ab”

But why no parentheses?:  
irb

> > $-w=true  
> > =\> true
> 
> > “abcd1234”.gsub! /\d+/,’’  
> > (irb):13: warning: ambiguous first argument; put parentheses or even  
> > spaces  
> > =\> “abcd”
> 
> > “123ab”.tr! “0-9”,""  
> > =\> “ab”

what is the ambiguity in the first case, and why is there no warning in  
the  
second case?

---

<div class="post-metadata">

**Author:** ![rubynut](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/8e8cbc/32.png) [@rubynut](https://www.ruby-forum.com/u/rubynut)\
**Post date:** [December 10, 2009, 1:19pm UTC](https://www.ruby-forum.com/t/which-is-better/179978/7 "2009-12-10T13:19:28Z")

</div>

Hi,

Am Donnerstag, 10. Dez 2009, 18:58:04 +0900 schrieb Robert K.:

> > =\> “ab”  
> > Syntax OK  
> > 10:56:50 $ ruby19 -wce ‘o.gsub!(/\d/, “”)’  
> > Syntax OK  
> > 10:57:01 $
> 
> Why? No idea.

The slash could also be a division operator. Say:

$ ruby -wce ‘o.gsub! %r/\d/, “”’  
$ ruby -wce ‘o.gsub! %r{\d}, “”’

Bertram
