in reply to Re^2: Regular expression Problem
in thread Regular expression Problem

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.

Replies are listed 'Best First'.
Re^4: Regular expression Problem
by archimca (Novice) on Jan 18, 2011 at 14:40 UTC
    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?
      We don't explicitly close topics on this forum: standard protocol is including a message like this parent telling everyone that the issue is resolved. If the solution is inobvious, it's also considered good form to include your solution and code. Of course, this usually invites code commentary, so consider it optional.