in reply to No tools? Use Perl?!

Hello Boyd.Ako, and welcome to the Monastery!

It seems you’re missing a forward slash in the terminating regex:

print if (/^\<ReportHost/../^\<\/ReportHost>/); # ^

BTW, you don’t need to backslash the < character. Also, the regex will be easier to read if you change the delimiters, so that you don’t have to backslash the forward slash character:

print if m{^<ReportHost>} .. m{^</ReportHost>};

Note that the ^ metacharacter in a regex matches the beginning of a line. Is this what you want? It would be safer to match any occurrences of <ReportHost> and </ReportHost> wherever they occur within the XML document (i.e., leave out the ^ characters).

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: No tools? Use Perl?!
by Boyd.Ako (Novice) on Jul 29, 2016 at 01:46 UTC

    My forward slash is there. It's just after the filp-flp. No?

    print if (/^\<ReportHost/../^\<\/ReportHost>/); # ^
    ...you don’t need to backslash the < character. Also, the regex will be easier to read if you change the delimiters

    Thanks for the tip! Can you explain or link me to an explaination of the new syntax?

    Note that the ^ metacharacter in a regex matches the beginning of a line. Is this what you want?

    Intinctively, yes since I'm expecting to see it at the beginning of the line. Although, you do bring up a good point.

      My forward slash is there. It's just after the filp-flp. No?

      No. In your original post, the statement is
          print if (/^\<ReportHost/../^\<\ReportHost>/);
                    no forward slash here ^

      The  \R escape sequence (matching a generic linebreak) was added with Perl version 5.10. Please see Character Classes and other Special Escapes in perlre. Prior to version 5.10, its use would have earned you an "Unrecognized escape \R passed through..." warning if you had enabled warnings, which you very wisely seem to be doing.

      c:\@Work\Perl>perl -wMstrict -le "print qq{perl version $]}; ;; my $rx = qr{ ^ \< \ReportHost> }xms; print $rx; " perl version 5.010001 (?msx-i: ^ \< \ReportHost> ) c:\@Work\Perl>perl -wMstrict -le "print qq{perl version $]}; ;; my $rx = qr{ ^ \< \ReportHost> }xms; print $rx; " Unrecognized escape \R passed through at -e line 1. perl version 5.008009 (?msx-i: ^ < ReportHost> )

      Update:

      Can you explain or link me to an explaination of the new syntax?
      I'm not sure what "new" syntax you're referring to. Documentation for your local installation of Perl should be available to you from the command line via, e.g.,
          perldoc perlre
      with the most important regex syntax doc files being perlre, perlretut, and perlrequick. For the  qr// m// s/// tr/// operators, see perlop. (At least I hope you can use perldoc. If not, your Perl installation is seriously b0rken!)

      On-line, see The Documentation for all Perl documentation for the most recent and all previous Perl versions.


      Give a man a fish:  <%-{-{-{-<

      If you look again at the original post, you’ll see that the forward slash which is there is functioning as a delimiter for the regex. But the forward shash to be matched is missing. That’s why I recommended using different delimiters for the regex: if the delimiter is something other than a slash, you don’t need to backslash the slash inside the regex. Too many back- and forward-slashes produce what is called “leaning toothpick syndrome.”

      On the syntax for delimiters, see, e.g., perlretut#Simple-word-matching and perlop#Quote-and-Quote-like-Operators. Note that if you use any delimiter other than a forward slash, you need to prefix the regex with an m: /abc/ becomes m!abc! or m[abc], etc.

      Hope that helps,

      Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,