shan_emails has asked for the wisdom of the Perl Monks concerning the following question:

Hi All,

Is there any option to get the pattern in $str variable. ie., upto 1st match of word containing "<w:t>" tag block.

for example
$str = '<w:pict>4</w:pict> </w:r></w:p><w:tbl><w:tblPr> <w:t> </w:t> <w:t>Figure 2.</w:t> <w:t>Figure 3.</w:t> <w:pict>5</w:pict>';


then the output become $output = '<w:pict>4</w:pict> </w:r></w:p><w:tbl><w:tblPr> <w:t> </w:t> <w:t>Figure 2.</w:t>';
if $str = '<w:pict>4</w:pict> </w:r></w:p><w:tbl><w:tblPr> <w:t>Figure 2.</w:t> <w:t>Figure 3.</w:t> <w:pict>5</w:pict>'; Then output becomes $str = '<w:pict>4</w:pict> </w:r></w:p><w:tbl><w:tblPr> <w:t>Figure 2.</w:t>';


Thanks,
Shanmugam A.

Replies are listed 'Best First'.
Re: get the string upto word containing tag block
by suhailck (Friar) on Aug 17, 2010 at 07:01 UTC
    Is this what you looking for, my ($output)=$str=~m{(.*?</w:t>)}ms;
Re: get the string upto word containing tag block
by prasadbabu (Prior) on Aug 17, 2010 at 07:21 UTC

    Hi Shanmugam,

    If I understood your quesion well, this dirty code will give your output. BUT TIMTOWTDI.

    $str = '<w:pict>4</w:pict> </w:r></w:p><w:tbl><w:tblPr> <w:t> </w:t> <w:t>Figure 2.</w:t> <w:t>Figure 3.</w:t> <w:pict>5</w:pict>'; $str = qr{$str}; $str =~ m|^((((?![^\s]+<\/w:t>).)+).+?(<\/w:t>))|s; $new_str = $1; $new_str =~ s|(<w:t>\w(((?!</w:t>).)+)</w:t>).+$|$1|s; print $new_str; output: ======= <w:pict>4</w:pict> </w:r></w:p><w:tbl><w:tblPr> <w:t> </w:t> <w:t>Figure 2.</w:t>

    Prasad