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