G'day herman4016,

You're reading the input line by line; accordingly, your regex is only trying to match against the single line in $_ for any given iteration of the while loop.

What you need to do is read the input in records. You can do this by locally setting $/, the input record sparator (see "perlvar: Variables related to filehandles").

You didn't post your data in <code>...</code> tags (in fact, you appear to have "<p>...</p>" tags with embedded "<br />" tags and what looks like extraneous whitespace), so I'm having to guess what it really looks like. In the script below, I've assumed paragraph mode (records are separated by two or more blank lines) but maybe "ENDEL;" might be a better end-of-record indicator.

You have an additional problem in your posted regex with greedy matches (e.g. " .*"). If you don't understand that, see Quantifiers under "perlre: Regular Expressions".

The following script shows the technique you'll need. You may need to adjust this based on my various comments above.

#!/usr/bin/env perl -l use strict; use warnings; my $re = qr{TEXT;\s+LAYER 13[1-7];\s+TEXTTYPE 0;.*?STRING ([^;]+)}s; { local $/ = ""; while (<DATA>) { print $1 if /$re/; } } __DATA__ ... ... TEXT; LAYER 133; TEXTTYPE 0; PRESENTATION 0,2,0; STRANS 0,0,0; XY 1; X: 91410; Y: 50020; STRING AVDD12; ENDEL; BOUNDARY; LAYER 108; DATATYPE 0; XY 5; X: 0; Y: 0; X: 0; Y: 53530; X: 91410; Y: 53530; X: 91410; Y: 0; X: 0; Y: 0; ENDEL; ... ...

Output:

AVDD12

-- Ken


In reply to Re: how to write multi-line regex by kcott
in thread how to write multi-line regex by herman4016

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.