
John Maddock wrote: JM> Eric Niebler wrote:
Empty alternatives are not allowed (these are almost always a mistake), but if you really want an empty alternative use (?:) as a placeholder, for example:
"|abc" is not a valid expression, but "(?:)|abc" is and is equivalent, also the expression: "(?:abc)??" has exactly the same effect.
This would seem to be non-compliant behavior according to TR1, which references ECMA-262, which describes the regex syntax in section 15.10.1 as:
JM> Quite possibly, although I note that Perl 6 (last time I checked anyway) was JM> planning to disallow these, on the grounds that they are a persistent source JM> of buggy regular expressions. And as noted there are alternatives: JM> |abc == (?:abc)?? == (?:)|abc JM> abc| == (?:abc)? == abc|(?:) JM> John. Disallowing these would do more bad than good. Buggy regular expressions are quite easy to write, even without '|)' Using |) is quite intuitive. We have a lot of cases than some symbol(s) may or may not be present, and this is a natural way to say that. Moreover it makes regular expressions more flexible. This is from http://en.wikipedia.org/wiki/Regular_expression [QUOTE] Regular expressions are particularly useful in the production of code completion systems and syntax highlighting in integrated development environments (IDEs). For example: (public|private|protected|)\s*(\w+)\s+(\w+)\s*\( as used to match type declarations in source code (see also, Regular expression examples ). [/QUOTE] Alternatives are just alternatives. Or should we assume that boost::regex is only Perl6+ compatible? That's imho. Thank you. -- impulse9