# Regular expression question

**URL:** <https://www.ruby-forum.com/t/regular-expression-question/138642>\
**Category:** Ruby\
**Created:** [May 26, 2008, 10:46am UTC](https://www.ruby-forum.com/t/regular-expression-question/138642 "2008-05-26T10:46:03Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [May 26, 2008, 10:46am UTC](https://www.ruby-forum.com/t/regular-expression-question/138642/1 "2008-05-26T10:46:03Z")

</div>

I’d like to make sort of a comment remover for C++.

If there’s a source file like bellow…

\<source.txt\>  
// 1234  
12//34  
///1234  
12///34

and my code is…

file = open(“source.txt”, “r”)  
file.each\_line {|line|  
if line.match /(.\*)///  
puts $1 if $1.length \> 0  
end  
}  
file.close

result is…

12  
/  
12/

but!, what I expected is~

12  
12

What’s wrong with this code…(I think I may not understand regular  
expression totally…) and what should I do for this?

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [May 26, 2008, 10:50am UTC](https://www.ruby-forum.com/t/regular-expression-question/138642/2 "2008-05-26T10:50:47Z")

</div>

removed\_email\_address@domain.invalid wrote:

> 12  
> /  
> 12/
> 
> but!, what I expected is~
> 
> 12  
> 12

.\* tries to match as much as possible (greedy) so the // will match  
the  
last // it finds - not the first. If you want to make the .\* non-greedy,  
add  
a ? after the \*.

HTH,  
Sebastian

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [May 26, 2008, 11:49am UTC](https://www.ruby-forum.com/t/regular-expression-question/138642/3 "2008-05-26T11:49:49Z")

</div>

2008/5/26 [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> and my code is…
> 
> expression totally…) and what should I do for this?  
> Additional remarks: using the block form of File.open is usually  
> better because code will be more robust. Here’s another solution:

File.foreach “source.txt” do |line|  
puts line.sub(%r{//.\*}, ‘’)  
end

Kind regards

robert
