From: Robert Klemme Date: 2008-09-10T18:05:33+09:00 Subject: Re: problems with oniguruma lookahead 2008/9/10 Xiong Chiamiov : > Ruby 1.8.6 with Oniguruama installed and working (everywhere else, this > seems to be my problem). > > Let me preface this by saying that I am new to Ruby (and kinda jumped > in, rather than learning it properly), and regexes are not my thing - > that why I have nifty regex-checkers. > > I am trying to extract some parts out of a string > ("

'Algebra'
") that I scraped from some html. I'm getting > nil returned from the expression: > > Oniguruma::ORegexp.new("(?<=

').*(?='
)").scan(scraped_html) > > with scraped_html being the string mentioned above. > > Doing some experimenting, I have found that the first part works just as > planned (eg, everything except the lookahead). Using wildcards (. and > *) works as well: > > Oniguruma::ORegexp.new("(?<=

').*(?=.)").scan(scraped_html) > > returns [#, #], as > expected. However, anything else (<, b, \w, etc.) causes the regex to > not match. > > I am quite befuddled about this, though I (almost certainly) know it is > my fault. Any help would be much appreciated. With 1.9: irb(main):001:0> s="

'Algebra'
" => "

'Algebra'
" irb(main):002:0> s.scan %r{(?<=

').*(?='
)} => [] irb(main):003:0> s.scan %r{(?<=

').*?(?='
)} => ["Algebra"] Note the non greedy match. I usually rather do this in those cases: irb(main):005:0> s.scan %r{

'(.*?)'
} => [["Algebra"]] I.e. use groups to extract the part that I am interested in. Kind regards robert -- use.inject do |as, often| as.you_can - without end