in reply to regexp: Mind-boggling negative assertions...
++stevieb for helpful suggestions. Also, Anonymous Monk makes a good point that a list of test cases would be very helpful. That is, the code that stevieb posted works for the cases that you have mentioned in your post and replies...but it may fail on other cases that you have failed to mention here.
This is a case where the YAPE::Regex::Explain module can be helpful (see item 9 in Basic debugging checklist).
Here is the YAPE::Regex::Explain output for your original regex:The regular expression: (?-imsx:^https?://(?!www\.)robidu\.de/) 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): ---------------------------------------------------------------------- ^ the beginning of the string ---------------------------------------------------------------------- http 'http' ---------------------------------------------------------------------- s? 's' (optional (matching the most amount possible)) ---------------------------------------------------------------------- :// '://' ---------------------------------------------------------------------- (?! look ahead to see if there is not: ---------------------------------------------------------------------- www 'www' ---------------------------------------------------------------------- \. '.' ---------------------------------------------------------------------- ) end of look-ahead ---------------------------------------------------------------------- robidu 'robidu' ---------------------------------------------------------------------- \. '.' ---------------------------------------------------------------------- de/ 'de/' ---------------------------------------------------------------------- ) end of grouping ----------------------------------------------------------------------
The regular expression: (?-imsx:^https?://.*?\.?(?<!www\.)robidu\.de/) 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): ---------------------------------------------------------------------- ^ the beginning of the string ---------------------------------------------------------------------- http 'http' ---------------------------------------------------------------------- s? 's' (optional (matching the most amount possible)) ---------------------------------------------------------------------- :// '://' ---------------------------------------------------------------------- .*? any character except \n (0 or more times (matching the least amount possible)) ---------------------------------------------------------------------- \.? '.' (optional (matching the most amount possible)) ---------------------------------------------------------------------- (?<! look behind to see if there is not: ---------------------------------------------------------------------- www 'www' ---------------------------------------------------------------------- \. '.' ---------------------------------------------------------------------- ) end of look-behind ---------------------------------------------------------------------- robidu 'robidu' ---------------------------------------------------------------------- \. '.' ---------------------------------------------------------------------- de/ 'de/' ---------------------------------------------------------------------- ) end of grouping ----------------------------------------------------------------------
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: regexp: Mind-boggling negative assertions...
by stevieb (Canon) on Aug 17, 2015 at 00:59 UTC |