# Gsub for string

**URL:** <https://www.ruby-forum.com/t/gsub-for-string/184354>\
**Category:** Ruby\
**Created:** [March 1, 2010, 11:39am UTC](https://www.ruby-forum.com/t/gsub-for-string/184354 "2010-03-01T11:39:57Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Reinhart\_V](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/13edae/32.png) [@Reinhart\_V](https://www.ruby-forum.com/u/Reinhart_V)\
**Post date:** [March 1, 2010, 11:39am UTC](https://www.ruby-forum.com/t/gsub-for-string/184354/1 "2010-03-01T11:39:57Z")

</div>

Hi,

I’m looking for a function that makes it possible to do the folowing:

Replace all substrings --xxxx-- with -xxxx–1 in a string.

The xxxx represents an unknown value (can be anything)

Is there a way to set unknow characters in a gsub function?

Thx!

---

<div class="post-metadata">

**Author:** ![Reinhart\_V](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/13edae/32.png) [@Reinhart\_V](https://www.ruby-forum.com/u/Reinhart_V)\
**Post date:** [March 1, 2010, 1:42pm UTC](https://www.ruby-forum.com/t/gsub-for-string/184354/2 "2010-03-01T13:42:16Z")

</div>

2010/3/1 Reinhart V. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> I’m looking for a function that makes it possible to do the folowing:
> 
> Replace all substrings --xxxx-- with -xxxx–1 in a string.
> 
> The xxxx represents an unknown value (can be anything)
> 
> Is there a way to set unknow characters in a gsub function?

You can match arbitrary characters and use capturing groups

str.gsub(/–([^-]+)–/, ‘-\1–1’)

Kind regards

robert

---

<div class="post-metadata">

**Author:** ![Reinhart\_V](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/13edae/32.png) [@Reinhart\_V](https://www.ruby-forum.com/u/Reinhart_V)\
**Post date:** [March 1, 2010, 2:56pm UTC](https://www.ruby-forum.com/t/gsub-for-string/184354/3 "2010-03-01T14:56:57Z")

</div>

Robert K. wrote:

> You can match arbitrary characters and use capturing groups
> 
> str.gsub(/–([^-]+)–/, ‘-\1–1’)

which you can also do in a block form, which is sometimes clearer and  
lets you do things like modifying xxxx.

str.gsub(/–([^-]+)–/) { “-#{$1}–1” }

---

<div class="post-metadata">

**Author:** ![Reinhart\_V](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/13edae/32.png) [@Reinhart\_V](https://www.ruby-forum.com/u/Reinhart_V)\
**Post date:** [March 1, 2010, 3:49pm UTC](https://www.ruby-forum.com/t/gsub-for-string/184354/4 "2010-03-01T15:49:17Z")

</div>

2010/3/1 Brian C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> Robert K. wrote:
> 
> > You can match arbitrary characters and use capturing groups
> > 
> > str.gsub(/–([^-]+)–/, ‘-\1–1’)
> 
> which you can also do in a block form, which is sometimes clearer and  
> lets you do things like modifying xxxx.
> 
> str.gsub(/–([^-]+)–/) { “-#{$1}–1” }

For fairness reasons you should also mention that this is also slower  
and not needed in this particular case since the replacement is fixed.  
🙂

This is also a good opportunity to link to my most recent blog entry  
which dealt with string replacements:

[http://blog.rubybestpractices.com/posts/rklemme/020-Code\_Massage.html](http://blog.rubybestpractices.com/posts/rklemme/020-Code_Massage.html)

Cheers

robert
