# Regular Expresion Needed

**URL:** <https://www.ruby-forum.com/t/regular-expresion-needed/107265>\
**Category:** Ruby\
**Created:** [June 19, 2007, 9:06pm UTC](https://www.ruby-forum.com/t/regular-expresion-needed/107265 "2007-06-19T21:06:39Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![mwalsh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/91b2a8/32.png) [@mwalsh](https://www.ruby-forum.com/u/mwalsh)\
**Post date:** [June 19, 2007, 9:06pm UTC](https://www.ruby-forum.com/t/regular-expresion-needed/107265/1 "2007-06-19T21:06:39Z")

</div>

Hello,

I am fairly new to Ruby. I have some good Perl experience and I need  
to “translate” a regex in Perl over to Ruby. Here’s what I have:

$\_ = ‘abc123def456ghi789jkl’;  
while(m/(\d{4})/g)  
{ print “$1\n”; }

Which outputs:  
123  
456  
789

Ruby doesn’t seem to have the same modifiers that Perl does (that  
handy little g). How can I get this same output in Ruby? Thanks!

---

<div class="post-metadata">

**Author:** ![mwalsh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/91b2a8/32.png) [@mwalsh](https://www.ruby-forum.com/u/mwalsh)\
**Post date:** [June 19, 2007, 9:31pm UTC](https://www.ruby-forum.com/t/regular-expresion-needed/107265/2 "2007-06-19T21:31:42Z")

</div>

Matt W. wrote:

> 123  
> 456  
> 789
> 
> Ruby doesn’t seem to have the same modifiers that Perl does (that  
> handy little g). How can I get this same output in Ruby? Thanks!

‘abc123def456ghi789jkl’.scan(/\d{3}/).each{|m| puts m}

---

<div class="post-metadata">

**Author:** ![mwalsh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/91b2a8/32.png) [@mwalsh](https://www.ruby-forum.com/u/mwalsh)\
**Post date:** [June 19, 2007, 9:35pm UTC](https://www.ruby-forum.com/t/regular-expresion-needed/107265/3 "2007-06-19T21:35:42Z")

</div>

Assume you meant to match \d{3} since \d{4} won’t match anything in your  
test string. Pass a regexp to String#scan:

irb(main):027:0\>s = ‘abc123def456ghi789jkl’  
irb(main):028:0\> s.scan(/(\d{3})/).each do |m|  
irb(main):029:1\* puts m  
irb(main):030:1\> end  
123  
456  
789  
=\> [[“123”], [“456”], [“789”]

---

<div class="post-metadata">

**Author:** ![mwalsh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/91b2a8/32.png) [@mwalsh](https://www.ruby-forum.com/u/mwalsh)\
**Post date:** [June 19, 2007, 9:37pm UTC](https://www.ruby-forum.com/t/regular-expresion-needed/107265/4 "2007-06-19T21:37:43Z")

</div>

Hi,

Am Mittwoch, 20. Jun 2007, 04:05:07 +0900 schrieb Matt W.:

> 789  
> ‘abc123def456ghi789jkl’.scan /\d{1,4}/ do |x| puts x end  
> ‘abc123def456ghi789jkl’.scan /\d{1,4}/ do puts $& end  
> ‘abc123def456ghi789jkl’.scan( /\d{1,4}/) { |x| puts x }  
> ‘abc123def456ghi789jkl’.scan( /\d{1,4}/) { puts $& }

Bertram
