On 1 Oct 2002 at 18:47, [EMAIL PROTECTED] wrote:

> > > all text up to, but not including the string "union".
> >
> > rule getstuffbeforeunion { (.*?) union | (.*) }
> > 
> > "a union" => "a "
> > "b" => "b"
> 
> hmm... well, it works, but its not very efficient. It basically 
> scans the whole string to the end to see if there is a "union" string, and 
> then backtracks to take the alternative. And hence, its not very scalable. 
> It also doesn't 'complexify' very well.

What about

Perl 5:   /(.*?)(?:union|$)/
Perl 6:   /(.*?) [union | $$]/

or if you want to exlude 'union' from match

Perl 5:   /(.*?)(?=union|$)/
Perl 6:   /(.*?) [<after: union> | $$]/

IMHO those should scan string one char at a time until 'union' or end-
of-string, which is optimal solution.

-- 
Markus Laire 'malaire' <[EMAIL PROTECTED]>


Reply via email to