Robert Klemme
11/25/2007 4:24:00 PM
On 25.11.2007 16:39, Eric I. wrote:
> On Nov 25, 10:18 am, makoto kuwata <k...@kuwata-lab.com> wrote:
>> Hi, all.
>>
>> Is it possible to specify start position of Regexp matching?
>>
>> str = "foo bar baz"
>> m = /ba/.match(str)
>> p m.begin(0) #=> 4
>> m = /ba/.match(str, 5) # is it possible?
>> p m.begin(0) #=> 8 (if possible)
>>
>> If it is possible, some kind of parser or scanner can be
>> implemented easily.
>> # StringScanner is a litte too big, I think.
>
> You could try something like this:
>
> m = /^.{5,}(ba)/.match(str)
> p m.begin(1)
>
> In the regular expression, you're saying start at the beginning and
> skip at least 5 characters. But then we have to use parens to "note"
> the part you're interested in, and then we have to pass 1 rather than
> 0 to begin, so it reports the location of the first noted match (0
> would report where the entire Regexp matched, and that would be the
> beginning of the line).
>
> An alternative would be to slice the first n characters off the front
> of the string and then do the match.
Another alternative is to use String#scan - we would have to know what
the OP really wants to parse though to decide whether it's a feasible
solution.
Kind regards
robert