1 | [section Appendix 2: Differences from Boost.Regex] |
---|
2 | |
---|
3 | Since many of xpressive's users are likely to be familiar with the _regexpp_ library, |
---|
4 | I would be remiss if I failed to point out some important differences between xpressive |
---|
5 | and _regexpp_. In particular:\n |
---|
6 | |
---|
7 | * `xpressive::basic_regex<>` is a template on the iterator type, not the character type. |
---|
8 | * `xpressive::basic_regex<>` cannot be constructed directly from a string; rather, you must use |
---|
9 | `basic_regex::compile()` or `regex_compiler<>` to build a regex object from a string. |
---|
10 | * `xpressive::basic_regex<>` does not have an `imbue()` member function; rather, the `imbue()` member |
---|
11 | function is in the `xpressive::regex_compiler<>` factory. |
---|
12 | * `boost::basic_regex<>` has a subset of `std::basic_string<>`'s members. `xpressive::basic_regex<>` |
---|
13 | does not. The members lacking are: `assign()`, `operator[]()`, `max_size()`, `begin()`, `end()`, |
---|
14 | `size()`, `compare()`, and `operator=(std::basic_string<>)`. |
---|
15 | * Other member functions that exist in `boost::basic_regex<>` but do not exist in |
---|
16 | `xpressive::basic_regex<>` are: `set_expression()`, `get_allocator()`, `imbue()`, `getloc()`, |
---|
17 | `getflags()`, and `str()`. |
---|
18 | * `xpressive::basic_regex<>` does not have a RegexTraits template parameter. Customization of regex |
---|
19 | syntax and localization behavior will be controlled by `regex_compiler<>` and a custom regex facet |
---|
20 | for `std::locale`. |
---|
21 | * `xpressive::basic_regex<>` and `xpressive::match_results<>` do not have an Allocator template |
---|
22 | parameter. This is by design. |
---|
23 | * `match_not_dot_null` and `match_not_dot_newline` have moved from the `match_flag_type` enum to the |
---|
24 | `syntax_option_type` enum, and they have changed names to `not_dot_null` and `not_dot_newline`. |
---|
25 | * The following `syntax_option_type` enumeration values are not supported: `escape_in_lists`, |
---|
26 | `char_classes`, `intervals`, `limited_ops`, `newline_alt`, `bk_plus_qm`, `bk_braces`, `bk_parens`, |
---|
27 | `bk_refs`, `bk_vbar`, `use_except`, `failbit`, `literal`, `perlex`, `basic`, `extended`, `emacs`, |
---|
28 | `awk`, `grep` ,`egrep`, `sed`, `JavaScript`, `JScript`. |
---|
29 | * The following `match_flag_type` enumeration values are not supported: `match_not_bob`, |
---|
30 | `match_not_eob`, `match_perl`, `match_posix`, and `match_extra`. |
---|
31 | |
---|
32 | |
---|
33 | Also, in the current implementation, the regex algorithms in xpressive will not detect |
---|
34 | pathological behavior and abort by throwing an exception. It is up to you to write efficient |
---|
35 | patterns that do not behave pathologically. |
---|
36 | |
---|
37 | [endsect] |
---|