[Israel.pm] Regex question

Avishalom Shalit avishalom at gmail.com
Wed Dec 24 07:23:04 PST 2008


@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
>



-- 
-- vish



More information about the Perl mailing list