Regular expression question

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?

[email protected] 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

2008/5/26 [email protected]:

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