| [/ |
| / Copyright (c) 2008 Eric Niebler |
| / |
| / Distributed under the Boost Software License, Version 1.0. (See accompanying |
| / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| /] |
| |
| [section Appendix 3: Differences from Boost.Regex] |
| |
| Since many of xpressive's users are likely to be familiar with the _regexpp_ library, |
| I would be remiss if I failed to point out some important differences between xpressive |
| and _regexpp_. In particular:\n |
| |
| * `xpressive::basic_regex<>` is a template on the iterator type, not the character type. |
| * `xpressive::basic_regex<>` cannot be constructed directly from a string; rather, you must use |
| `basic_regex::compile()` or `regex_compiler<>` to build a regex object from a string. |
| * `xpressive::basic_regex<>` does not have an `imbue()` member function; rather, the `imbue()` member |
| function is in the `xpressive::regex_compiler<>` factory. |
| * `boost::basic_regex<>` has a subset of `std::basic_string<>`'s members. `xpressive::basic_regex<>` |
| does not. The members lacking are: `assign()`, `operator[]()`, `max_size()`, `begin()`, `end()`, |
| `size()`, `compare()`, and `operator=(std::basic_string<>)`. |
| * Other member functions that exist in `boost::basic_regex<>` but do not exist in |
| `xpressive::basic_regex<>` are: `set_expression()`, `get_allocator()`, `imbue()`, `getloc()`, |
| `getflags()`, and `str()`. |
| * `xpressive::basic_regex<>` does not have a RegexTraits template parameter. Customization of regex |
| syntax and localization behavior will be controlled by `regex_compiler<>` and a custom regex facet |
| for `std::locale`. |
| * `xpressive::basic_regex<>` and `xpressive::match_results<>` do not have an Allocator template |
| parameter. This is by design. |
| * `match_not_dot_null` and `match_not_dot_newline` have moved from the `match_flag_type` enum to the |
| `syntax_option_type` enum, and they have changed names to `not_dot_null` and `not_dot_newline`. |
| * The following `syntax_option_type` enumeration values are not supported: `escape_in_lists`, |
| `char_classes`, `intervals`, `limited_ops`, `newline_alt`, `bk_plus_qm`, `bk_braces`, `bk_parens`, |
| `bk_refs`, `bk_vbar`, `use_except`, `failbit`, `literal`, `perlex`, `basic`, `extended`, `emacs`, |
| `awk`, `grep` ,`egrep`, `sed`, `JavaScript`, `JScript`. |
| * The following `match_flag_type` enumeration values are not supported: `match_not_bob`, |
| `match_not_eob`, `match_perl`, `match_posix`, and `match_extra`. |
| |
| Also, in the current implementation, the regex algorithms in xpressive will not detect |
| pathological behavior and abort by throwing an exception. It is up to you to write efficient |
| patterns that do not behave pathologically. |
| |
| [endsect] |