in reply to Regular expression Problem

As best as I can tell, there are syntax problems with your posted regular expressions. This might just be because the square brackets ( [ ] ) in your post got converted into links. This is because you didn't wrap your code in <code> tags. See Writeup Formatting Tips.

You can get Perl to interpret a regular expression for you using the YAPE::Regex::Explain module off of CPAN. You might use that module something like:

#!/usr/bin/perl use strict; use warnings; use YAPE::Regex::Explain; my $re = qr/regex_here/; print YAPE::Regex::Explain->new($re)->explain();

Alternatively, if you clean up your post or post again, I might be able to explain the results to you.

Update:AnomalousMonk's comment made me reread the above; by "post again" I meant in this thread, but clearly that was inobvious.

Replies are listed 'Best First'.
Re^2: Regular expression Problem
by AnomalousMonk (Archbishop) on Jan 14, 2011 at 09:15 UTC
    ... if you ... post again ...

    archimca: Please clean up this thread. Please don't post the same thing in another thread, even if more readable.

Re^2: Regular expression Problem
by archimca (Novice) on Jan 14, 2011 at 14:05 UTC
    Thanks for your suggestion....
      Thank you for cleaning that up. The code:

      #!/usr/bin/perl use strict; use warnings; use YAPE::Regex::Explain; my $re = qr/(%TABLE{.*?name\=\"History[^"]*"[^}]*}%\s*(\|[^\|]*){3}\|\ +s)((\|[^\|]*){3}\|\s)*/o; print YAPE::Regex::Explain->new($re)->explain();
      outputs
      The regular expression: (?-imsx:(%TABLE{.*?name="History[^"]*"[^}]*}%\s*(\|[^\|]*){3}\|\s)((\| +[^\|]*){3}\|\s)*) matches as follows: NODE EXPLANATION ---------------------------------------------------------------------- (?-imsx: group, but do not capture (case-sensitive) (with ^ and $ matching normally) (with . not matching \n) (matching whitespace and # normally): ---------------------------------------------------------------------- ( group and capture to \1: ---------------------------------------------------------------------- %TABLE{ '%TABLE{' ---------------------------------------------------------------------- .*? any character except \n (0 or more times (matching the least amount possible)) ---------------------------------------------------------------------- name="History 'name="History' ---------------------------------------------------------------------- [^"]* any character except: '"' (0 or more times (matching the most amount possible)) ---------------------------------------------------------------------- " '"' ---------------------------------------------------------------------- [^}]* any character except: '}' (0 or more times (matching the most amount possible)) ---------------------------------------------------------------------- }% '}%' ---------------------------------------------------------------------- \s* whitespace (\n, \r, \t, \f, and " ") (0 or more times (matching the most amount possible)) ---------------------------------------------------------------------- ( group and capture to \2 (3 times): ---------------------------------------------------------------------- \| '|' ---------------------------------------------------------------------- [^\|]* any character except: '\|' (0 or more times (matching the most amount possible)) ---------------------------------------------------------------------- ){3} end of \2 (NOTE: because you are using a quantifier on this capture, only the LAST repetition of the captured pattern will be stored in \2) ---------------------------------------------------------------------- \| '|' ---------------------------------------------------------------------- \s whitespace (\n, \r, \t, \f, and " ") ---------------------------------------------------------------------- ) end of \1 ---------------------------------------------------------------------- ( group and capture to \3 (0 or more times (matching the most amount possible)): ---------------------------------------------------------------------- ( group and capture to \4 (3 times): ---------------------------------------------------------------------- \| '|' ---------------------------------------------------------------------- [^\|]* any character except: '\|' (0 or more times (matching the most amount possible)) ---------------------------------------------------------------------- ){3} end of \4 (NOTE: because you are using a quantifier on this capture, only the LAST repetition of the captured pattern will be stored in \4) ---------------------------------------------------------------------- \| '|' ---------------------------------------------------------------------- \s whitespace (\n, \r, \t, \f, and " ") ---------------------------------------------------------------------- )* end of \3 (NOTE: because you are using a quantifier on this capture, only the LAST repetition of the captured pattern will be stored in \3) ---------------------------------------------------------------------- ) end of grouping ----------------------------------------------------------------------
      The match and the substitution have identical bodies, so they will match the same thing. Let us know if the above is unclear.

      As JavaFan points out below, you should likely omit the o and e modifiers. bart and AnomalousMonk's discussion below is also very useful - You can likely have wholly equivalent behavior in your code while having only one instance of this long and fragile regex.

        Thank you so much for all your help. I am all set now. I appreciate everybody's input in helping me to understand this complicated part of Perl Regular expression. :) Please let me know how can i close this topic?