[Israel.pm] Regex question

Peter Gordon peter at pg-consultants.com
Wed Dec 24 09:13:13 PST 2008


Cute!
No repetition, and shorter

On Wed, 2008-12-24 at 17:23 +0200, Avishalom Shalit wrote:
> @b=split(/\b(?=Title)/,$text);
> that should do it,
> split on the word boundary right vefore the Title
> 
> 2008/12/24 Shlomi Fish <shlomif at iglu.org.il>:
> > On Wednesday 24 December 2008, Peter Gordon wrote:
> >> Suppose I have the following code
> >> my $text =<<EOF;
> >> Title1
> >>   text1
> >>   text2
> >> Title2
> >>   text3
> >>   text4
> >> EOF
> >>
> >> @blocks = $text =~ m!(^Title\S+.*?)(?=^Title|\Z)!mgs ;
> >>
> >> The idea is to split the text into blocks. This code works, but the
> >> lookahead requires repeating part of the first half of the regex.
> >>
> >> Is there a shorter regex, without the repetition, that can do the same
> >> thing?
> >
> > Don't know about shorter, but you can extract the common string to a variable:
> >
> > {{{{{{{{{{{{{{{{
> > #!/usr/bin/perl
> >
> > use strict;
> > use warnings;
> >
> > use Data::Dumper;
> >
> > my $text =<<'EOF';
> > Title1
> >  text1
> >  text2
> > Title2
> >  text3
> >  text4
> > EOF
> >
> > my $delim = "^Title";
> >
> > my @blocks = $text =~ m!($delim\S+.*?)(?=$delim|\Z)!gms ;
> >
> > print Dumper([\@blocks]);
> > }}}}}}}}}}}}}}}}
> >
> > A few notes:
> >
> > 1. You should always specify the delimiters of the here-doc explicitly. People
> > don't know off-hand if it's <<'EOF' or <<"EOF".
> >
> > 2. Someone I know recommends to sort the option characters for a Perl regex
> > alphabetically - like "gms" instead of "mgs". This facilitates searching for
> > them.
> >
> > Regards,
> >
> >        Shlomi Fish
> >
> >>
> >> Peter
> >>
> >> _______________________________________________
> >> Perl mailing list
> >> Perl at perl.org.il
> >> http://perl.org.il/mailman/listinfo/perl
> >
> >
> >
> > --
> > -----------------------------------------------------------------
> > Shlomi Fish       http://www.shlomifish.org/
> > My Aphorisms - http://www.shlomifish.org/humour.html
> >
> > Shlomi, so what are you working on? Working on a new wiki about unit testing
> > fortunes in freecell? -- Ran Eilam
> > _______________________________________________
> > Perl mailing list
> > Perl at perl.org.il
> > http://perl.org.il/mailman/listinfo/perl
> >
> 
> 
> 




More information about the Perl mailing list