On Wed, 23 Mar 2005 17:06:59 +0100, Jan Eden wrote:
> Hi,
>
> I use the following regex to split a (really simple) file into sections
> headed by <h1>.+?</h1>:
>
> while ($content =~ m#<h1>(.+?)</h1>(.+?)(?=<h1>)#gs) {
> ...
> }
>
> This works perfectly, but obviously does not catch the last section, as it is
> not followed
> by <h1>.
>
> How can I catch the last section without
>
> * doing a separate match for it
> * loosing the convenience of the g switch to wade through the whole file?
>
> Thanks,
>
> Jan
Change your RE to:
m#<h1>(.+?)</h1>(.+?)(?=<h1>|$)#gs
In other words, look ahead to either a <h1> or the end of the string ("$").
I have to admit this problem wasn't as simple as I initially thought -
I still have no idea why my first guess didn't work:
m#<h1>(.+?)</h1>(.+?)(?=<h1>)?#gs
Maybe someone with more knowledge of REs can answer?
Regards,
--
Offer Kaye
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>