[tpm] Regex question

Liam R E Quin liam at holoweb.net
Tue Nov 6 11:24:13 PST 2007


On Tue, 2007-11-06 at 13:39 -0500, Indy Singh wrote:
> Hello all,
> 
> I have some multiline data as shown below.  I want to remove all 
> occurances of 'foo.*?' that are at the beginning of a line.  How can I 
> do that witha regex.  I can do it with a while loop, but is a there a 
> more elegent way with a single regex?

$x =~ s/^foo.*?//gm;

The m modifier means to treat the string as having multiple lines,
so that ^ matches the start of a line.

The g (global) means to do it everywhere in the input.

You can also write this as,
$x =~ s{^foo.*?}{}gm;

and, for more complex expressions,

$x =~ s{
    ^            # start of line
    foo          # first three letters of foot
    .*?          # this will match the rest of the line
}{}gmx;

Note that ^foo.* will match the same as ^foo.*? here, because
the . can't match a newline without the /s flag.

Liam

-- 
Liam Quin - XML Activity Lead, W3C, http://www.w3.org/People/Quin/
Pictures from old books: http://fromoldbooks.org/
Ankh: irc.sorcery.net irc.gnome.org www.advogato.org



More information about the toronto-pm mailing list