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 http://www.zenspider.com/Languages/Ruby/QuickRef.html#11 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.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs