Mystery regexp

I found this regexp in the docs for the OptionParser class, and I don’t
understand it. Google hasn’t helped, nor has the Pickaxe, so I thought
I would ask here. The purpose of the code is to ensure that a file
extension submitted by the user begins with a period (a dot).

file_ext.sub!(/\A.(?=.)/, “.”)

I understand all except (?=.) As far as I can tell the regexp works
fine without it. I can delete the dot inside the parens, and the code
still runs. I can change the = to a - and the code runs, but if I
substitute a letter or a * instead, it doesn’t.

Someone please clue me in here. What is this thing?

Check out Ruby | zenspider.com | by ryan davis for
details on this portion of the regex. It seems to involve look-ahead
capability.

HTH.

On 7/17/06, Steve T. [email protected] wrote:

substitute a letter or a * instead, it doesn’t.

Someone please clue me in here. What is this thing?

\A start of subject (independent of multiline mode)

(?= is a positive look ahead assetion

so \A the begining of the input . is a literal . (and there must be
something more than that afterwords.

$ irb

re = /\A.(?=.)/
=> /\A.(?=.)/
re.match(‘abc’)
=> nil
re.match(‘.’)
=> nil
re.match(‘.a’)
=> #MatchData:0x40988d7c
re.match(‘.123’)
=> #MatchData:0x409879a4
re.match(‘…’)
=> #MatchData:0x409866a8

On Jul 17, 2006, at 12:35 PM, Steve T. wrote:

file_ext.sub!(/\A.(?=.)/, “.”)

I understand all except (?=.)

That’s a look-ahead assertion, ensuring there is at least one
character following the period. Observe:

test = “.hidden_file”
=> “.hidden_file”

test.sub!(/\A.(?=.)/, “.”)
=> “.hidden_file”

test = “.”
=> “.”

test.sub!(/\A.(?=.)/, “.”)
=> nil

Hope that helps.

James Edward G. II

There ya go. Thanks.