diff --git a/doc/history.qbk b/doc/history.qbk index 8de86545..cd2c09af 100644 --- a/doc/history.qbk +++ b/doc/history.qbk @@ -15,6 +15,10 @@ Currently open issues can be viewed [@https://svn.boost.org/trac/boost/query?sta All issues including closed ones can be viewed [@https://svn.boost.org/trac/boost/query?status=assigned&status=closed&status=new&status=reopened&component=regex&order=priority&col=id&col=summary&col=status&col=type&col=milestone&col=component here]. +[h4 Boost-1.54] + +Fixed issue [@https://svn.boost.org/trac/boost/ticket/8569 #8569]. + [h4 Boost-1.53] Fixed Issues: @@ -161,3 +165,4 @@ and [endsect] + diff --git a/doc/html/boost_regex/background_information.html b/doc/html/boost_regex/background_information.html index 72f8f389..f64afd31 100644 --- a/doc/html/boost_regex/background_information.html +++ b/doc/html/boost_regex/background_information.html @@ -3,7 +3,7 @@ Background Information - + @@ -22,11 +22,11 @@
PrevUpHomeNext
-
+
-
+
Headers
Localization
Thread diff --git a/doc/html/boost_regex/background_information/acknowledgements.html b/doc/html/boost_regex/background_information/acknowledgements.html index 629f3ec4..2bc2d380 100644 --- a/doc/html/boost_regex/background_information/acknowledgements.html +++ b/doc/html/boost_regex/background_information/acknowledgements.html @@ -3,7 +3,7 @@ Acknowledgements - + @@ -22,7 +22,7 @@ -
+
diff --git a/doc/html/boost_regex/background_information/examples.html b/doc/html/boost_regex/background_information/examples.html index d5bb96bb..f1fe113f 100644 --- a/doc/html/boost_regex/background_information/examples.html +++ b/doc/html/boost_regex/background_information/examples.html @@ -3,7 +3,7 @@ Test and Example Programs - + @@ -22,7 +22,7 @@
PrevUpHomeNext
-
+

Test and Example Programs diff --git a/doc/html/boost_regex/background_information/faq.html b/doc/html/boost_regex/background_information/faq.html index 8a7e7293..8205d1e8 100644 --- a/doc/html/boost_regex/background_information/faq.html +++ b/doc/html/boost_regex/background_information/faq.html @@ -3,7 +3,7 @@ FAQ - + @@ -22,7 +22,7 @@
PrevUpHomeNext
-
+

FAQ

diff --git a/doc/html/boost_regex/background_information/futher.html b/doc/html/boost_regex/background_information/futher.html index 632dc4c0..a1c01ad7 100644 --- a/doc/html/boost_regex/background_information/futher.html +++ b/doc/html/boost_regex/background_information/futher.html @@ -3,7 +3,7 @@ References and Further Information - + @@ -22,7 +22,7 @@
PrevUpHomeNext
-
+

References and Further Information diff --git a/doc/html/boost_regex/background_information/headers.html b/doc/html/boost_regex/background_information/headers.html index f082cc7c..0acff3e8 100644 --- a/doc/html/boost_regex/background_information/headers.html +++ b/doc/html/boost_regex/background_information/headers.html @@ -3,7 +3,7 @@ Headers - + @@ -22,7 +22,7 @@
PrevUpHomeNext
-
+
diff --git a/doc/html/boost_regex/background_information/history.html b/doc/html/boost_regex/background_information/history.html index 4ff2534e..c40df050 100644 --- a/doc/html/boost_regex/background_information/history.html +++ b/doc/html/boost_regex/background_information/history.html @@ -3,7 +3,7 @@ History - + @@ -21,7 +21,7 @@
PrevUpHome
-
+
@@ -37,6 +37,13 @@

+ Boost-1.54 +
+

+ Fixed issue #8569. +

+
+ Boost-1.53

@@ -44,7 +51,7 @@ #7644.

- + Boost-1.51

@@ -54,7 +61,7 @@ #6346.

- + Boost-1.50

@@ -63,7 +70,7 @@ expression.

- + Boost-1.48

@@ -73,7 +80,7 @@ #5736.

- + Boost 1.47

@@ -85,7 +92,7 @@ #5504.

- + Boost 1.44

@@ -103,7 +110,7 @@ #3890

- + Boost 1.42
    @@ -131,7 +138,7 @@
- + Boost 1.40
  • @@ -139,7 +146,7 @@ branch resets and recursive regular expressions.
- + Boost 1.38
    @@ -166,7 +173,7 @@
- + Boost 1.34
    @@ -188,7 +195,7 @@
- + Boost 1.33.1
    @@ -257,7 +264,7 @@
- + Boost 1.33.0
    @@ -311,14 +318,14 @@
- + Boost 1.32.1
  • Fixed bug in partial matches of bounded repeats of '.'.
- + Boost 1.31.0
    diff --git a/doc/html/boost_regex/background_information/locale.html b/doc/html/boost_regex/background_information/locale.html index 84ab183a..27f3c937 100644 --- a/doc/html/boost_regex/background_information/locale.html +++ b/doc/html/boost_regex/background_information/locale.html @@ -3,7 +3,7 @@ Localization - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/background_information/performance.html b/doc/html/boost_regex/background_information/performance.html index a7faf73c..c633f4ab 100644 --- a/doc/html/boost_regex/background_information/performance.html +++ b/doc/html/boost_regex/background_information/performance.html @@ -3,7 +3,7 @@ Performance - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/background_information/redist.html b/doc/html/boost_regex/background_information/redist.html index 71862eef..e9f27e4f 100644 --- a/doc/html/boost_regex/background_information/redist.html +++ b/doc/html/boost_regex/background_information/redist.html @@ -3,7 +3,7 @@ Redistributables - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/background_information/standards.html b/doc/html/boost_regex/background_information/standards.html index ef4ab13b..b96d6c90 100644 --- a/doc/html/boost_regex/background_information/standards.html +++ b/doc/html/boost_regex/background_information/standards.html @@ -3,7 +3,7 @@ Standards Conformance - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +

    Standards Conformance diff --git a/doc/html/boost_regex/background_information/thread_safety.html b/doc/html/boost_regex/background_information/thread_safety.html index c3bc993f..ec4ba372 100644 --- a/doc/html/boost_regex/background_information/thread_safety.html +++ b/doc/html/boost_regex/background_information/thread_safety.html @@ -3,7 +3,7 @@ Thread Safety - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +

    Thread Safety diff --git a/doc/html/boost_regex/captures.html b/doc/html/boost_regex/captures.html index 64ad2112..f940c23f 100644 --- a/doc/html/boost_regex/captures.html +++ b/doc/html/boost_regex/captures.html @@ -3,7 +3,7 @@ Understanding Marked Sub-Expressions and Captures - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +

    Understanding Marked Sub-Expressions and Captures diff --git a/doc/html/boost_regex/configuration.html b/doc/html/boost_regex/configuration.html index 089ba5b6..d6d7ed63 100644 --- a/doc/html/boost_regex/configuration.html +++ b/doc/html/boost_regex/configuration.html @@ -3,7 +3,7 @@ Configuration - + @@ -22,11 +22,11 @@
    PrevUpHomeNext
    -
    +
    -
    +
    Compiler Setup
    Locale and traits class selection
    diff --git a/doc/html/boost_regex/configuration/algorithm.html b/doc/html/boost_regex/configuration/algorithm.html index a538250c..f07caec7 100644 --- a/doc/html/boost_regex/configuration/algorithm.html +++ b/doc/html/boost_regex/configuration/algorithm.html @@ -3,7 +3,7 @@ Algorithm Selection - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/configuration/compiler.html b/doc/html/boost_regex/configuration/compiler.html index 16db404c..067a2bae 100644 --- a/doc/html/boost_regex/configuration/compiler.html +++ b/doc/html/boost_regex/configuration/compiler.html @@ -3,7 +3,7 @@ Compiler Setup - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/configuration/linkage.html b/doc/html/boost_regex/configuration/linkage.html index 39851dfd..ff1e8d75 100644 --- a/doc/html/boost_regex/configuration/linkage.html +++ b/doc/html/boost_regex/configuration/linkage.html @@ -3,7 +3,7 @@ Linkage Options - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/configuration/locale.html b/doc/html/boost_regex/configuration/locale.html index 4648a887..5d48f518 100644 --- a/doc/html/boost_regex/configuration/locale.html +++ b/doc/html/boost_regex/configuration/locale.html @@ -3,7 +3,7 @@ Locale and traits class selection - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +

    Locale and traits class selection diff --git a/doc/html/boost_regex/configuration/tuning.html b/doc/html/boost_regex/configuration/tuning.html index ce568a38..86249a66 100644 --- a/doc/html/boost_regex/configuration/tuning.html +++ b/doc/html/boost_regex/configuration/tuning.html @@ -3,7 +3,7 @@ Algorithm Tuning - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/format.html b/doc/html/boost_regex/format.html index a63144e3..794b2b08 100644 --- a/doc/html/boost_regex/format.html +++ b/doc/html/boost_regex/format.html @@ -3,7 +3,7 @@ Search and Replace Format String Syntax - + @@ -22,11 +22,11 @@
    PrevUpHomeNext
    -
    +
    -
    +
    Sed Format String Syntax
    Perl Format String Syntax
    Boost-Extended diff --git a/doc/html/boost_regex/format/boost_format_syntax.html b/doc/html/boost_regex/format/boost_format_syntax.html index 30dcc61b..09e55997 100644 --- a/doc/html/boost_regex/format/boost_format_syntax.html +++ b/doc/html/boost_regex/format/boost_format_syntax.html @@ -3,7 +3,7 @@ Boost-Extended Format String Syntax - + @@ -22,7 +22,7 @@ -
    +

    Boost-Extended Format String Syntax diff --git a/doc/html/boost_regex/format/perl_format.html b/doc/html/boost_regex/format/perl_format.html index 2c2a4c45..5ea16d08 100644 --- a/doc/html/boost_regex/format/perl_format.html +++ b/doc/html/boost_regex/format/perl_format.html @@ -3,7 +3,7 @@ Perl Format String Syntax - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/format/sed_format.html b/doc/html/boost_regex/format/sed_format.html index f28a0138..91e00ce6 100644 --- a/doc/html/boost_regex/format/sed_format.html +++ b/doc/html/boost_regex/format/sed_format.html @@ -3,7 +3,7 @@ Sed Format String Syntax - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/install.html b/doc/html/boost_regex/install.html index fc33e4b0..0e3b1bb4 100644 --- a/doc/html/boost_regex/install.html +++ b/doc/html/boost_regex/install.html @@ -3,7 +3,7 @@ Building and Installing the Library - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/introduction_and_overview.html b/doc/html/boost_regex/introduction_and_overview.html index 431695cb..14b67995 100644 --- a/doc/html/boost_regex/introduction_and_overview.html +++ b/doc/html/boost_regex/introduction_and_overview.html @@ -3,7 +3,7 @@ Introduction and Overview - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +

    Introduction and Overview diff --git a/doc/html/boost_regex/partial_matches.html b/doc/html/boost_regex/partial_matches.html index d75b31c5..251bec81 100644 --- a/doc/html/boost_regex/partial_matches.html +++ b/doc/html/boost_regex/partial_matches.html @@ -3,7 +3,7 @@ Partial Matches - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/ref.html b/doc/html/boost_regex/ref.html index a7759385..300febed 100644 --- a/doc/html/boost_regex/ref.html +++ b/doc/html/boost_regex/ref.html @@ -3,7 +3,7 @@ Reference - + @@ -22,11 +22,11 @@
    PrevUpHomeNext
    -
    +
    -
    +
    basic_regex
    match_results
    sub_match
    diff --git a/doc/html/boost_regex/ref/bad_expression.html b/doc/html/boost_regex/ref/bad_expression.html index 082ab5bc..b5847cbe 100644 --- a/doc/html/boost_regex/ref/bad_expression.html +++ b/doc/html/boost_regex/ref/bad_expression.html @@ -3,7 +3,7 @@ bad_expression - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/ref/basic_regex.html b/doc/html/boost_regex/ref/basic_regex.html index 2bb7b969..45c29948 100644 --- a/doc/html/boost_regex/ref/basic_regex.html +++ b/doc/html/boost_regex/ref/basic_regex.html @@ -3,7 +3,7 @@ basic_regex - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/ref/concepts.html b/doc/html/boost_regex/ref/concepts.html index 5e47f6c3..db0b840a 100644 --- a/doc/html/boost_regex/ref/concepts.html +++ b/doc/html/boost_regex/ref/concepts.html @@ -3,7 +3,7 @@ Concepts - + @@ -22,11 +22,11 @@
    PrevUpHomeNext
    -
    +
    -
    +
    charT Requirements
    Traits Class Requirements
    diff --git a/doc/html/boost_regex/ref/concepts/charT_concept.html b/doc/html/boost_regex/ref/concepts/charT_concept.html index c457dd46..0df26f0d 100644 --- a/doc/html/boost_regex/ref/concepts/charT_concept.html +++ b/doc/html/boost_regex/ref/concepts/charT_concept.html @@ -3,7 +3,7 @@ charT Requirements - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/ref/concepts/iterator_concepts.html b/doc/html/boost_regex/ref/concepts/iterator_concepts.html index 3a2e03ac..b058b525 100644 --- a/doc/html/boost_regex/ref/concepts/iterator_concepts.html +++ b/doc/html/boost_regex/ref/concepts/iterator_concepts.html @@ -3,7 +3,7 @@ Iterator Requirements - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +

    Iterator Requirements diff --git a/doc/html/boost_regex/ref/concepts/traits_concept.html b/doc/html/boost_regex/ref/concepts/traits_concept.html index c5095a31..d21da07d 100644 --- a/doc/html/boost_regex/ref/concepts/traits_concept.html +++ b/doc/html/boost_regex/ref/concepts/traits_concept.html @@ -3,7 +3,7 @@ Traits Class Requirements - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +

    Traits Class Requirements diff --git a/doc/html/boost_regex/ref/deprecated_interfaces.html b/doc/html/boost_regex/ref/deprecated_interfaces.html index 5fab65ef..1dfa7328 100644 --- a/doc/html/boost_regex/ref/deprecated_interfaces.html +++ b/doc/html/boost_regex/ref/deprecated_interfaces.html @@ -3,7 +3,7 @@ Deprecated Interfaces - + @@ -22,11 +22,11 @@
    PrevUpHomeNext
    -
    +
    -
    +
    regex_format (Deprecated)
    regex_grep diff --git a/doc/html/boost_regex/ref/deprecated_interfaces/old_regex.html b/doc/html/boost_regex/ref/deprecated_interfaces/old_regex.html index 4df82498..fbb2cc78 100644 --- a/doc/html/boost_regex/ref/deprecated_interfaces/old_regex.html +++ b/doc/html/boost_regex/ref/deprecated_interfaces/old_regex.html @@ -3,7 +3,7 @@ High Level Class RegEx (Deprecated) - + @@ -22,7 +22,7 @@ -
    +

    High Level Class RegEx (Deprecated) diff --git a/doc/html/boost_regex/ref/deprecated_interfaces/regex_format.html b/doc/html/boost_regex/ref/deprecated_interfaces/regex_format.html index f3624805..06a2d099 100644 --- a/doc/html/boost_regex/ref/deprecated_interfaces/regex_format.html +++ b/doc/html/boost_regex/ref/deprecated_interfaces/regex_format.html @@ -3,7 +3,7 @@ regex_format (Deprecated) - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +

    regex_format (Deprecated) diff --git a/doc/html/boost_regex/ref/deprecated_interfaces/regex_grep.html b/doc/html/boost_regex/ref/deprecated_interfaces/regex_grep.html index 4b921576..87ea0856 100644 --- a/doc/html/boost_regex/ref/deprecated_interfaces/regex_grep.html +++ b/doc/html/boost_regex/ref/deprecated_interfaces/regex_grep.html @@ -3,7 +3,7 @@ regex_grep (Deprecated) - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +

    regex_grep (Deprecated) diff --git a/doc/html/boost_regex/ref/deprecated_interfaces/regex_split.html b/doc/html/boost_regex/ref/deprecated_interfaces/regex_split.html index bad9d805..8ef9a927 100644 --- a/doc/html/boost_regex/ref/deprecated_interfaces/regex_split.html +++ b/doc/html/boost_regex/ref/deprecated_interfaces/regex_split.html @@ -3,7 +3,7 @@ regex_split (deprecated) - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +

    regex_split (deprecated) diff --git a/doc/html/boost_regex/ref/error_type.html b/doc/html/boost_regex/ref/error_type.html index f8223c30..9de62d0b 100644 --- a/doc/html/boost_regex/ref/error_type.html +++ b/doc/html/boost_regex/ref/error_type.html @@ -3,7 +3,7 @@ error_type - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/ref/internal_details.html b/doc/html/boost_regex/ref/internal_details.html index 9627f036..6b861994 100644 --- a/doc/html/boost_regex/ref/internal_details.html +++ b/doc/html/boost_regex/ref/internal_details.html @@ -3,7 +3,7 @@ Internal Details - + @@ -22,11 +22,11 @@
    PrevUpHomeNext
    -
    +
    - diff --git a/doc/html/boost_regex/ref/internal_details/uni_iter.html b/doc/html/boost_regex/ref/internal_details/uni_iter.html index 8e513ecd..33b07a2a 100644 --- a/doc/html/boost_regex/ref/internal_details/uni_iter.html +++ b/doc/html/boost_regex/ref/internal_details/uni_iter.html @@ -3,7 +3,7 @@ Unicode Iterators - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +

    Unicode Iterators diff --git a/doc/html/boost_regex/ref/match_flag_type.html b/doc/html/boost_regex/ref/match_flag_type.html index f654c0c4..f8ad6e71 100644 --- a/doc/html/boost_regex/ref/match_flag_type.html +++ b/doc/html/boost_regex/ref/match_flag_type.html @@ -3,7 +3,7 @@ match_flag_type - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/ref/match_results.html b/doc/html/boost_regex/ref/match_results.html index 7db60134..951d22d2 100644 --- a/doc/html/boost_regex/ref/match_results.html +++ b/doc/html/boost_regex/ref/match_results.html @@ -3,7 +3,7 @@ match_results - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/ref/non_std_strings.html b/doc/html/boost_regex/ref/non_std_strings.html index afddb231..1ce7cc57 100644 --- a/doc/html/boost_regex/ref/non_std_strings.html +++ b/doc/html/boost_regex/ref/non_std_strings.html @@ -3,7 +3,7 @@ Interfacing With Non-Standard String Types - + @@ -22,12 +22,12 @@
    PrevUpHomeNext
    -
    +
    -
    +
    Working With Unicode and ICU String Types
    diff --git a/doc/html/boost_regex/ref/non_std_strings/icu.html b/doc/html/boost_regex/ref/non_std_strings/icu.html index f557ff85..a649ef9c 100644 --- a/doc/html/boost_regex/ref/non_std_strings/icu.html +++ b/doc/html/boost_regex/ref/non_std_strings/icu.html @@ -3,7 +3,7 @@ Working With Unicode and ICU String Types - + @@ -22,12 +22,12 @@
    PrevUpHomeNext
    -
    +
    -
    +
    Introduction to using Regex with ICU
    Unicode diff --git a/doc/html/boost_regex/ref/non_std_strings/icu/intro.html b/doc/html/boost_regex/ref/non_std_strings/icu/intro.html index d46fd423..14810d35 100644 --- a/doc/html/boost_regex/ref/non_std_strings/icu/intro.html +++ b/doc/html/boost_regex/ref/non_std_strings/icu/intro.html @@ -3,7 +3,7 @@ Introduction to using Regex with ICU - + @@ -22,7 +22,7 @@ -
    +
    Introduction to using Regex with ICU diff --git a/doc/html/boost_regex/ref/non_std_strings/icu/unicode_algo.html b/doc/html/boost_regex/ref/non_std_strings/icu/unicode_algo.html index 3ebcb82a..114ee7af 100644 --- a/doc/html/boost_regex/ref/non_std_strings/icu/unicode_algo.html +++ b/doc/html/boost_regex/ref/non_std_strings/icu/unicode_algo.html @@ -3,7 +3,7 @@ Unicode Regular Expression Algorithms - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    Unicode Regular Expression Algorithms diff --git a/doc/html/boost_regex/ref/non_std_strings/icu/unicode_iter.html b/doc/html/boost_regex/ref/non_std_strings/icu/unicode_iter.html index 61c6452f..2ee8179c 100644 --- a/doc/html/boost_regex/ref/non_std_strings/icu/unicode_iter.html +++ b/doc/html/boost_regex/ref/non_std_strings/icu/unicode_iter.html @@ -3,7 +3,7 @@ Unicode Aware Regex Iterators - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    Unicode Aware Regex Iterators diff --git a/doc/html/boost_regex/ref/non_std_strings/icu/unicode_types.html b/doc/html/boost_regex/ref/non_std_strings/icu/unicode_types.html index b6e1cdcf..d4758101 100644 --- a/doc/html/boost_regex/ref/non_std_strings/icu/unicode_types.html +++ b/doc/html/boost_regex/ref/non_std_strings/icu/unicode_types.html @@ -3,7 +3,7 @@ Unicode regular expression types - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    Unicode regular expression types diff --git a/doc/html/boost_regex/ref/non_std_strings/mfc_strings.html b/doc/html/boost_regex/ref/non_std_strings/mfc_strings.html index 3c5686e7..7f75d0e7 100644 --- a/doc/html/boost_regex/ref/non_std_strings/mfc_strings.html +++ b/doc/html/boost_regex/ref/non_std_strings/mfc_strings.html @@ -3,7 +3,7 @@ Using Boost Regex With MFC Strings - + @@ -22,12 +22,12 @@
    PrevUpHomeNext
    -
    +
    -
    +
    Introduction to Boost.Regex and MFC Strings
    Regex diff --git a/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_algo.html b/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_algo.html index d9ea110e..9c5a7ead 100644 --- a/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_algo.html +++ b/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_algo.html @@ -3,7 +3,7 @@ Overloaded Algorithms For MFC String Types - + @@ -22,7 +22,7 @@ -
    +
    Overloaded Algorithms For MFC String Types diff --git a/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_intro.html b/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_intro.html index 7f223ac1..489b9db5 100644 --- a/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_intro.html +++ b/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_intro.html @@ -3,7 +3,7 @@ Introduction to Boost.Regex and MFC Strings - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    Introduction to Boost.Regex and MFC Strings diff --git a/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_iter.html b/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_iter.html index c8fea021..e5073dd8 100644 --- a/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_iter.html +++ b/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_iter.html @@ -3,7 +3,7 @@ Iterating Over the Matches Within An MFC String - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    Iterating Over the Matches Within An MFC String diff --git a/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_regex_create.html b/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_regex_create.html index 402bd027..efb6de66 100644 --- a/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_regex_create.html +++ b/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_regex_create.html @@ -3,7 +3,7 @@ Regular Expression Creation From an MFC String - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    Regular Expression Creation From an MFC String diff --git a/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_regex_types.html b/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_regex_types.html index a3dab65f..ea426392 100644 --- a/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_regex_types.html +++ b/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_regex_types.html @@ -3,7 +3,7 @@ Regex Types Used With MFC Strings - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    Regex Types Used With MFC Strings diff --git a/doc/html/boost_regex/ref/posix.html b/doc/html/boost_regex/ref/posix.html index 43bd4955..ee9e15c4 100644 --- a/doc/html/boost_regex/ref/posix.html +++ b/doc/html/boost_regex/ref/posix.html @@ -3,7 +3,7 @@ POSIX Compatible C API's - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/ref/regex_iterator.html b/doc/html/boost_regex/ref/regex_iterator.html index 0c9743d2..a58fbd4f 100644 --- a/doc/html/boost_regex/ref/regex_iterator.html +++ b/doc/html/boost_regex/ref/regex_iterator.html @@ -3,7 +3,7 @@ regex_iterator - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/ref/regex_match.html b/doc/html/boost_regex/ref/regex_match.html index df381ea2..e0de4b9d 100644 --- a/doc/html/boost_regex/ref/regex_match.html +++ b/doc/html/boost_regex/ref/regex_match.html @@ -3,7 +3,7 @@ regex_match - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/ref/regex_replace.html b/doc/html/boost_regex/ref/regex_replace.html index 40ea1664..2027b93e 100644 --- a/doc/html/boost_regex/ref/regex_replace.html +++ b/doc/html/boost_regex/ref/regex_replace.html @@ -3,7 +3,7 @@ regex_replace - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/boost_regex/ref/regex_search.html b/doc/html/boost_regex/ref/regex_search.html index 19a5b5ac..1df187d5 100644 --- a/doc/html/boost_regex/ref/regex_search.html +++ b/doc/html/boost_regex/ref/regex_search.html @@ -3,7 +3,7 @@ regex_search - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -

    @@ -1012,10 +1012,10 @@ The following escape sequences match the boundaries of words:

    - \< Matches the start of a word. + < Matches the start of a word.

    - \> Matches the end of a word. + > Matches the end of a word.

    \b Matches a word boundary (the start or end of a word). @@ -1040,10 +1040,10 @@ \' Matches at the end of a buffer only.

    - \A Matches at the start of a buffer only (the same as =\`=). + \A Matches at the start of a buffer only (the same as \`).

    - \z Matches at the end of a buffer only (the same as \\'). + \z Matches at the end of a buffer only (the same as \').

    \Z Matches a zero-width assertion consisting of an optional sequence of newlines @@ -1071,7 +1071,7 @@

    The escape sequence \Q begins a "quoted sequence": all the subsequent characters are treated as literals, until either the end - of the regular expression or \E is found. For example the expression: \Q\*+\Ea+ + of the regular expression or \E is found. For example the expression: \Q*+\Ea+ would match either of:

    \*+a
    @@ -1317,19 +1317,19 @@
                 no-pattern.
               
     
  • - =(?(N)yes-pattern|no-pattern)= Executes yes-pattern - if subexpression N has been matched, otherwise executes - no-pattern. -
  • -
  • - =(?(<name>)yes-pattern|no-pattern)= Executes - yes-pattern if named subexpression name + (?(N)yes-pattern|no-pattern) + Executes yes-pattern if subexpression N has been matched, otherwise executes no-pattern.
  • - =(?('name')yes-pattern|no-pattern)= Executes yes-pattern - if named subexpression name has been matched, otherwise - executes no-pattern. + (?(<name>)yes-pattern|no-pattern) + Executes yes-pattern if named subexpression name + has been matched, otherwise executes no-pattern. +
  • +
  • + (?('name')yes-pattern|no-pattern) + Executes yes-pattern if named subexpression name + has been matched, otherwise executes no-pattern.
  • (?(R)yes-pattern|no-pattern) Executes yes-pattern @@ -1368,7 +1368,7 @@ [::] [..]
  • - Escaped characters \ + Escaped characters [^]
  • Character set (bracket expression) [] diff --git a/doc/html/boost_regex/unicode.html b/doc/html/boost_regex/unicode.html index 43f1c7ec..6beee57f 100644 --- a/doc/html/boost_regex/unicode.html +++ b/doc/html/boost_regex/unicode.html @@ -3,7 +3,7 @@ Unicode and Boost.Regex - + @@ -22,7 +22,7 @@
    PrevUpHomeNext
    -
    +
    diff --git a/doc/html/index.html b/doc/html/index.html index cabf3cc6..7667d1fe 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -3,7 +3,7 @@ Boost.Regex - + @@ -38,7 +38,7 @@

    Table of Contents

    -
    +
    Configuration
    Compiler Setup
    @@ -198,7 +198,7 @@

  • - \n +

    - \n +

    - +

    Last revised: January 31, 2013 at 17:33:20 GMT

    Last revised: May 24, 2013 at 12:05:31 GMT


    diff --git a/doc/syntax_perl.qbk b/doc/syntax_perl.qbk index 5c794d75..570c0b6d 100644 --- a/doc/syntax_perl.qbk +++ b/doc/syntax_perl.qbk @@ -12,7 +12,7 @@ The Perl regular expression syntax is based on that used by the programming language Perl . Perl regular expressions are the -default behavior in Boost.Regex or you can pass the flag =perl= to the +default behavior in Boost.Regex or you can pass the flag [^perl] to the [basic_regex] constructor, for example: // e1 is a case sensitive Perl regular expression: @@ -34,9 +34,9 @@ The single character '.' when used outside of a character set will match any single character except: * The NULL character when the [link boost_regex.ref.match_flag_type flag - =match_not_dot_null=] is passed to the matching algorithms. + [^match_not_dot_null]] is passed to the matching algorithms. * The newline character when the [link boost_regex.ref.match_flag_type - flag =match_not_dot_newline=] is passed to + flag [^match_not_dot_newline]] is passed to the matching algorithms. [h4 Anchors] @@ -47,7 +47,7 @@ A '$' character shall match the end of a line. [h4 Marked sub-expressions] -A section beginning =(= and ending =)= acts as a marked sub-expression. +A section beginning [^(] and ending [^)] acts as a marked sub-expression. Whatever matched the sub-expression is split out in a separate field by the matching algorithms. Marked sub-expressions can also repeated, or referred to by a back-reference. @@ -58,23 +58,23 @@ A marked sub-expression is useful to lexically group part of a regular expression, but has the side-effect of spitting out an extra field in the result. As an alternative you can lexically group part of a regular expression, without generating a marked sub-expression by using -=(?:= and =)= , for example =(?:ab)+= will repeat =ab= without splitting +[^(?:] and [^)] , for example [^(?:ab)+] will repeat [^ab] without splitting out any separate sub-expressions. [h4 Repeats] Any atom (a single character, a marked sub-expression, or a character class) -can be repeated with the =*=, =+=, =?=, and ={}= operators. +can be repeated with the [^*], [^+], [^?], and [^{}] operators. -The =*= operator will match the preceding atom zero or more times, -for example the expression =a*b= will match any of the following: +The [^*] operator will match the preceding atom zero or more times, +for example the expression [^a*b] will match any of the following: b ab aaaaaaaab -The =+= operator will match the preceding atom one or more times, for -example the expression =a+b= will match any of the following: +The [^+] operator will match the preceding atom one or more times, for +example the expression [^a+b] will match any of the following: ab aaaaaaaab @@ -83,7 +83,7 @@ But will not match: b -The =?= operator will match the preceding atom zero or one times, for +The [^?] operator will match the preceding atom zero or one times, for example the expression ca?b will match any of the following: cb @@ -95,11 +95,11 @@ But will not match: An atom can also be repeated with a bounded repeat: -=a{n}= Matches 'a' repeated exactly n times. +[^a{n}] Matches 'a' repeated exactly n times. -=a{n,}= Matches 'a' repeated n or more times. +[^a{n,}] Matches 'a' repeated n or more times. -=a{n, m}= Matches 'a' repeated between n and m times inclusive. +[^a{n, m}] Matches 'a' repeated between n and m times inclusive. For example: @@ -120,7 +120,7 @@ be repeated, for example: a(*) -Will raise an error, as there is nothing for the =*= operator to be applied to. +Will raise an error, as there is nothing for the [^*] operator to be applied to. [h4 Non greedy repeats] @@ -128,19 +128,19 @@ The normal repeat operators are "greedy", that is to say they will consume as much input as possible. There are non-greedy versions available that will consume as little input as possible while still producing a match. -=*?= Matches the previous atom zero or more times, while consuming as little +[^*?] Matches the previous atom zero or more times, while consuming as little input as possible. -=+?= Matches the previous atom one or more times, while consuming as +[^+?] Matches the previous atom one or more times, while consuming as little input as possible. -=??= Matches the previous atom zero or one times, while consuming +[^??] Matches the previous atom zero or one times, while consuming as little input as possible. -={n,}?= Matches the previous atom n or more times, while consuming as +[^{n,}?] Matches the previous atom n or more times, while consuming as little input as possible. -={n,m}?= Matches the previous atom between n and m times, while +[^{n,m}?] Matches the previous atom between n and m times, while consuming as little input as possible. [h4 Possessive repeats] @@ -150,15 +150,15 @@ a match is found. However, this behaviour can sometime be undesireable so there also "possessive" repeats: these match as much as possible and do not then allow backtracking if the rest of the expression fails to match. -=*+= Matches the previous atom zero or more times, while giving nothing back. +[^*+] Matches the previous atom zero or more times, while giving nothing back. -=++= Matches the previous atom one or more times, while giving nothing back. +[^++] Matches the previous atom one or more times, while giving nothing back. -=?+= Matches the previous atom zero or one times, while giving nothing back. +[^?+] Matches the previous atom zero or one times, while giving nothing back. -={n,}+= Matches the previous atom n or more times, while giving nothing back. +[^{n,}+] Matches the previous atom n or more times, while giving nothing back. -={n,m}+= Matches the previous atom between n and m times, while giving nothing back. +[^{n,m}+] Matches the previous atom between n and m times, while giving nothing back. [h4 Back references] @@ -180,12 +180,12 @@ You can also use the \g escape for the same function, for example: [table [[Escape][Meaning]] -[[=\g1=][Match whatever matched sub-expression 1]] -[[=\g{1}=][Match whatever matched sub-expression 1: this form allows for safer - parsing of the expression in cases like =\g{1}2= or for indexes higher than 9 as in =\g{1234}=]] -[[=\g-1=][Match whatever matched the last opened sub-expression]] -[[=\g{-2}=][Match whatever matched the last but one opened sub-expression]] -[[=\g{one}=][Match whatever matched the sub-expression named "one"]] +[[[^\g1]][Match whatever matched sub-expression 1]] +[[[^\g{1}]][Match whatever matched sub-expression 1: this form allows for safer + parsing of the expression in cases like [^\g{1}2] or for indexes higher than 9 as in [^\g{1234}]]] +[[[^\g-1]][Match whatever matched the last opened sub-expression]] +[[[^\g{-2}]][Match whatever matched the last but one opened sub-expression]] +[[[^\g{one}]][Match whatever matched the sub-expression named "one"]] ] Finally the \k escape can be used to refer to named subexpressions, for example [^\k] will match @@ -193,24 +193,24 @@ whatever matched the subexpression named "two". [h4 Alternation] -The =|= operator will match either of its arguments, so for example: -=abc|def= will match either "abc" or "def". +The [^|] operator will match either of its arguments, so for example: +[^abc|def] will match either "abc" or "def". -Parenthesis can be used to group alternations, for example: =ab(d|ef)= +Parenthesis can be used to group alternations, for example: [^ab(d|ef)] will match either of "abd" or "abef". 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: +if you really want an empty alternative use [^(?:)] as a placeholder, for example: -=|abc= is not a valid expression, but +[^|abc] is not a valid expression, but -=(?:)|abc= is and is equivalent, also the expression: +[^(?:)|abc] is and is equivalent, also the expression: -=(?:abc)??= has exactly the same effect. +[^(?:abc)??] has exactly the same effect. [h4 Character sets] -A character set is a bracket-expression starting with =[= and ending with =]=, +A character set is a bracket-expression starting with [^[] and ending with [^]], it defines a set of characters, and matches any single character that is a member of that set. @@ -226,14 +226,14 @@ For example [^\[a-c\]] will match any single character in the range 'a' to 'c'. By default, for Perl regular expressions, a character x is within the range y to z, if the code point of the character lies within the codepoints of the endpoints of the range. Alternatively, if you set the -[link boost_regex.ref.syntax_option_type.syntax_option_type_perl =collate= flag] +[link boost_regex.ref.syntax_option_type.syntax_option_type_perl [^collate] flag] when constructing the regular expression, then ranges are locale sensitive. [h5 Negation] If the bracket-expression begins with the ^ character, then it matches the complement of the characters it contains, for example [^\[^a-c\]] matches -any character that is not in the range =a-c=. +any character that is not in the range [^a-c]. [h5 Character classes] @@ -255,7 +255,7 @@ As an extension, a collating element may also be specified via it's [[.NUL.]] -matches a =\0= character. +matches a [^\0] character. [h5 Equivalence classes] @@ -292,24 +292,24 @@ The following escape sequences are all synonyms for single characters: [table [[Escape][Character]] -[[=\a=][=\a=]] -[[=\e=][=0x1B=]] -[[=\f=][=\f=]] -[[=\n=][=\n=]] -[[=\r=][=\r=]] -[[=\t=][=\t=]] -[[=\v=][=\v=]] -[[=\b=][=\b= (but only inside a character class declaration).]] -[[=\cX=][An ASCII escape sequence - the character whose code point is X % 32]] -[[=\xdd=][A hexadecimal escape sequence - matches the single character whose +[[[^\a]][[^\a]]] +[[[^\e]][[^0x1B]]] +[[[^\f]][[^\f]]] +[[[^\n]][[^\n]]] +[[[^\r]][[^\r]]] +[[[^\t]][[^\t]]] +[[[^\v]][[^\v]]] +[[[^\b]][[^\b] (but only inside a character class declaration).]] +[[[^\cX]][An ASCII escape sequence - the character whose code point is X % 32]] +[[[^\xdd]][A hexadecimal escape sequence - matches the single character whose code point is 0xdd.]] -[[=\x{dddd}=][A hexadecimal escape sequence - matches the single character whose +[[[^\x{dddd}]][A hexadecimal escape sequence - matches the single character whose code point is 0xdddd.]] -[[=\0ddd=][An octal escape sequence - matches the single character whose +[[[^\0ddd]][An octal escape sequence - matches the single character whose code point is 0ddd.]] -[[=\N{name}=][Matches the single character which has the +[[[^\N{name}]][Matches the single character which has the [link boost_regex.syntax.collating_names symbolic name] /name/. - For example =\N{newline}= matches the single character \\n.]] + For example [^\N{newline}] matches the single character \\n.]] ] [h5 "Single character" character classes:] @@ -352,19 +352,19 @@ to the [link boost_regex.syntax.character_classes names used in character classe [[`\P{Name}`][Matches any character that does not have the property Name.][`[^[:Name:]]`]] ] -For example =\pd= matches any "digit" character, as does =\p{digit}=. +For example [^\pd] matches any "digit" character, as does [^\p{digit}]. [h5 Word Boundaries] The following escape sequences match the boundaries of words: -=\<= Matches the start of a word. +[^\<] Matches the start of a word. -=\>= Matches the end of a word. +[^\>] Matches the end of a word. -=\b= Matches a word boundary (the start or end of a word). +[^\b] Matches a word boundary (the start or end of a word). -=\B= Matches only when not at a word boundary. +[^\B] Matches only when not at a word boundary. [h5 Buffer boundaries] @@ -376,9 +376,9 @@ context is the whole of the input text that is being matched against \\' Matches at the end of a buffer only. -\\A Matches at the start of a buffer only (the same as =\\\`=). +\\A Matches at the start of a buffer only (the same as [^\\\`]). -\\z Matches at the end of a buffer only (the same as =\\'=). +\\z Matches at the end of a buffer only (the same as [^\\']). \\Z Matches a zero-width assertion consisting of an optional sequence of newlines at the end of a buffer: equivalent to the regular expression [^(?=\\v*\\z)]. Note that this is subtly different from Perl which @@ -386,39 +386,39 @@ behaves as if matching [^(?=\\n?\\z)]. [h5 Continuation Escape] -The sequence =\G= matches only at the end of the last match found, or at +The sequence [^\G] matches only at the end of the last match found, or at the start of the text being matched if no previous match was found. This escape useful if you're iterating over the matches contained within a text, and you want each subsequence match to start where the last one ended. [h5 Quoting escape] -The escape sequence =\Q= begins a "quoted sequence": all the subsequent characters +The escape sequence [^\Q] begins a "quoted sequence": all the subsequent characters are treated as literals, until either the end of the regular expression or \\E -is found. For example the expression: =\Q\*+\Ea+= would match either of: +is found. For example the expression: [^\Q\*+\Ea+] would match either of: \*+a \*+aaa [h5 Unicode escapes] -=\C= Matches a single code point: in Boost regex this has exactly the +[^\C] Matches a single code point: in Boost regex this has exactly the same effect as a "." operator. -=\X= Matches a combining character sequence: that is any non-combining +[^\X] Matches a combining character sequence: that is any non-combining character followed by a sequence of zero or more combining characters. [h5 Matching Line Endings] -The escape sequence =\R= matches any line ending character sequence, specifically it is identical to +The escape sequence [^\R] matches any line ending character sequence, specifically it is identical to the expression [^(?>\x0D\x0A?|\[\x0A-\x0C\x85\x{2028}\x{2029}\])]. [h5 Keeping back some text] -=\K= Resets the start location of $0 to the current text position: in other words everything to the +[^\K] Resets the start location of $0 to the current text position: in other words everything to the left of \K is "kept back" and does not form part of the regular expression match. $` is updated accordingly. -For example =foo\Kbar= matched against the text "foobar" would return the match "bar" for $0 and "foo" +For example [^foo\Kbar] matched against the text "foobar" would return the match "bar" for $0 and "foo" for $`. This can be used to simulate variable width lookbehind assertions. [h5 Any other escape] @@ -428,7 +428,7 @@ Any other escape sequence matches the character that is escaped, for example [h4 Perl Extended Patterns] -Perl-specific extensions to the regular expression syntax all start with =(?=. +Perl-specific extensions to the regular expression syntax all start with [^(?]. [h5 Named Subexpressions] @@ -447,25 +447,25 @@ and can also be refered to by name in a [perl_format] format string for search a [h5 Comments] -=(?# ... )= is treated as a comment, it's contents are ignored. +[^(?# ... )] is treated as a comment, it's contents are ignored. [h5 Modifiers] -=(?imsx-imsx ... )= alters which of the perl modifiers are in effect within +[^(?imsx-imsx ... )] alters which of the perl modifiers are in effect within the pattern, changes take effect from the point that the block is first seen -and extend to any enclosing =)=. Letters before a '-' turn that perl +and extend to any enclosing [^)]. Letters before a '-' turn that perl modifier on, letters afterward, turn it off. -=(?imsx-imsx:pattern)= applies the specified modifiers to pattern only. +[^(?imsx-imsx:pattern)] applies the specified modifiers to pattern only. [h5 Non-marking groups] -=(?:pattern)= lexically groups pattern, without generating an additional +[^(?:pattern)] lexically groups pattern, without generating an additional sub-expression. [h5 Branch reset] -=(?|pattern)= resets the subexpression count at the start of each "|" alternative within /pattern/. +[^(?|pattern)] resets the subexpression count at the start of each "|" alternative within /pattern/. The sub-expression count following this construct is that of whichever branch had the largest number of sub-expressions. This construct is useful when you want to capture one of a number of alternative matches @@ -483,7 +483,7 @@ In the following example the index of each sub-expression is shown below the exp [^(?=pattern)] consumes zero characters, only if pattern matches. -=(?!pattern)= consumes zero characters, only if pattern does not match. +[^(?!pattern)] consumes zero characters, only if pattern does not match. Lookahead is typically used to create the logical AND of two regular expressions, for example if a password must contain a lower case letter, @@ -500,13 +500,13 @@ could be used to validate the password. against the characters preceding the current position (pattern must be of fixed length). -=(?pattern)= /pattern/ is matched independently of the surrounding patterns, +[^(?>pattern)] /pattern/ is matched independently of the surrounding patterns, the expression will never backtrack into /pattern/. Independent sub-expressions are typically used to improve performance; only the best possible match for pattern will be considered, if this doesn't allow the expression as a @@ -516,21 +516,21 @@ whole to match then no match is found at all. [^(?['N]) (?-['N]) (?+['N]) (?R) (?0) (?&NAME)] -=(?R)= and =(?0)= recurse to the start of the entire pattern. +[^(?R)] and [^(?0)] recurse to the start of the entire pattern. -[^(?['N])] executes sub-expression /N/ recursively, for example =(?2)= will recurse to sub-expression 2. +[^(?['N])] executes sub-expression /N/ recursively, for example [^(?2)] will recurse to sub-expression 2. -[^(?-['N])] and [^(?+['N])] are relative recursions, so for example =(?-1)= recurses to the last sub-expression to be declared, -and =(?+1)= recurses to the next sub-expression to be declared. +[^(?-['N])] and [^(?+['N])] are relative recursions, so for example [^(?-1)] recurses to the last sub-expression to be declared, +and [^(?+1)] recurses to the next sub-expression to be declared. [^(?&NAME)] recurses to named sub-expression ['NAME]. [h5 Conditional Expressions] -=(?(condition)yes-pattern|no-pattern)= attempts to match /yes-pattern/ if +[^(?(condition)yes-pattern|no-pattern)] attempts to match /yes-pattern/ if the /condition/ is true, otherwise attempts to match /no-pattern/. -=(?(condition)yes-pattern)= attempts to match /yes-pattern/ if the /condition/ +[^(?(condition)yes-pattern)] attempts to match /yes-pattern/ if the /condition/ is true, otherwise matches the NULL string. /condition/ may be either: a forward lookahead assert, the index of @@ -542,15 +542,15 @@ Here is a summary of the possible predicates: * [^(?(?\=assert)yes-pattern|no-pattern)] Executes /yes-pattern/ if the forward look-ahead assert matches, otherwise executes /no-pattern/. -* =(?(?!assert)yes-pattern|no-pattern)= Executes /yes-pattern/ if the forward look-ahead assert does not match, otherwise +* [^(?(?!assert)yes-pattern|no-pattern)] Executes /yes-pattern/ if the forward look-ahead assert does not match, otherwise executes /no-pattern/. -* =(?(['N])yes-pattern|no-pattern)= Executes /yes-pattern/ if subexpression /N/ has been matched, otherwise +* [^(?(['N])yes-pattern|no-pattern)] Executes /yes-pattern/ if subexpression /N/ has been matched, otherwise executes /no-pattern/. -* =(?(<['name]>)yes-pattern|no-pattern)= Executes /yes-pattern/ if named subexpression /name/ has been matched, otherwise +* [^(?(<['name]>)yes-pattern|no-pattern)] Executes /yes-pattern/ if named subexpression /name/ has been matched, otherwise executes /no-pattern/. -* =(?('['name]')yes-pattern|no-pattern)= Executes /yes-pattern/ if named subexpression /name/ has been matched, otherwise +* [^(?('['name]')yes-pattern|no-pattern)] Executes /yes-pattern/ if named subexpression /name/ has been matched, otherwise executes /no-pattern/. -* =(?(R)yes-pattern|no-pattern)= Executes /yes-pattern/ if we are executing inside a recursion, otherwise +* [^(?(R)yes-pattern|no-pattern)] Executes /yes-pattern/ if we are executing inside a recursion, otherwise executes /no-pattern/. * [^(?(R['N])yes-pattern|no-pattern)] Executes /yes-pattern/ if we are executing inside a recursion to sub-expression /N/, otherwise executes /no-pattern/. @@ -564,10 +564,10 @@ this is usually used to define one or more named sub-expressions which are refer The order of precedence for of operators is as follows: # Collation-related bracket symbols `[==] [::] [..]` -# Escaped characters =\= +# Escaped characters [^\] # Character set (bracket expression) `[]` -# Grouping =()= -# Single-character-ERE duplication =* + ? {m,n}= +# Grouping [^()] +# Single-character-ERE duplication [^* + ? {m,n}] # Concatenation # Anchoring ^$ # Alternation | @@ -586,42 +586,42 @@ with individual elements matched as follows; [table [[Construct][What gets matched]] -[[=AtomA AtomB=][Locates the best match for /AtomA/ that has a following match for /AtomB/.]] -[[=Expression1 | Expression2=][If /Expresion1/ can be matched then returns that match, +[[[^AtomA AtomB]][Locates the best match for /AtomA/ that has a following match for /AtomB/.]] +[[[^Expression1 | Expression2]][If /Expresion1/ can be matched then returns that match, otherwise attempts to match /Expression2/.]] -[[=S{N}=][Matches /S/ repeated exactly N times.]] -[[=S{N,M}=][Matches S repeated between N and M times, and as many times as possible.]] -[[=S{N,M}?=][Matches S repeated between N and M times, and as few times as possible.]] -[[=S?, S*, S+=][The same as =S{0,1}=, =S{0,UINT_MAX}=, =S{1,UINT_MAX}= respectively.]] -[[=S??, S*?, S+?=][The same as =S{0,1}?=, =S{0,UINT_MAX}?=, =S{1,UINT_MAX}?= respectively.]] -[[=(?>S)=][Matches the best match for /S/, and only that.]] +[[[^S{N}]][Matches /S/ repeated exactly N times.]] +[[[^S{N,M}]][Matches S repeated between N and M times, and as many times as possible.]] +[[[^S{N,M}?]][Matches S repeated between N and M times, and as few times as possible.]] +[[[^S?, S*, S+]][The same as [^S{0,1}], [^S{0,UINT_MAX}], [^S{1,UINT_MAX}] respectively.]] +[[[^S??, S*?, S+?]][The same as [^S{0,1}?], [^S{0,UINT_MAX}?], [^S{1,UINT_MAX}?] respectively.]] +[[[^(?>S)]][Matches the best match for /S/, and only that.]] [[[^(?=S), (?<=S)]][Matches only the best match for /S/ (this is only visible if there are capturing parenthesis within /S/).]] -[[=(?!S), (? conv_type; typedef match_results match_type; - typedef typename match_type::allocator_type alloc_type; + //typedef typename match_type::allocator_type alloc_type; match_type what; bool result = ::boost::regex_match(conv_type(first, first, last), conv_type(last, first, last), what, e, flags); // copy results across to m: @@ -439,7 +439,7 @@ bool do_regex_match(BidiIterator first, BidiIterator last, { typedef u8_to_u32_iterator conv_type; typedef match_results match_type; - typedef typename match_type::allocator_type alloc_type; + //typedef typename match_type::allocator_type alloc_type; match_type what; bool result = ::boost::regex_match(conv_type(first, first, last), conv_type(last, first, last), what, e, flags); // copy results across to m: @@ -598,7 +598,7 @@ bool do_regex_search(BidiIterator first, BidiIterator last, { typedef u16_to_u32_iterator conv_type; typedef match_results match_type; - typedef typename match_type::allocator_type alloc_type; + //typedef typename match_type::allocator_type alloc_type; match_type what; bool result = ::boost::regex_search(conv_type(first, first, last), conv_type(last, first, last), what, e, flags, conv_type(base)); // copy results across to m: @@ -615,7 +615,7 @@ bool do_regex_search(BidiIterator first, BidiIterator last, { typedef u8_to_u32_iterator conv_type; typedef match_results match_type; - typedef typename match_type::allocator_type alloc_type; + //typedef typename match_type::allocator_type alloc_type; match_type what; bool result = ::boost::regex_search(conv_type(first, first, last), conv_type(last, first, last), what, e, flags, conv_type(base)); // copy results across to m: diff --git a/include/boost/regex/pending/static_mutex.hpp b/include/boost/regex/pending/static_mutex.hpp index 9c10050b..5459ef86 100644 --- a/include/boost/regex/pending/static_mutex.hpp +++ b/include/boost/regex/pending/static_mutex.hpp @@ -36,14 +36,7 @@ // namespace boost{ -class BOOST_REGEX_DECL scoped_static_mutex_lock; - -class static_mutex -{ -public: - typedef scoped_static_mutex_lock scoped_lock; - pthread_mutex_t m_mutex; -}; +class static_mutex; #define BOOST_STATIC_MUTEX_INIT { PTHREAD_MUTEX_INITIALIZER, } @@ -67,6 +60,12 @@ private: bool m_have_lock; }; +class static_mutex +{ +public: + typedef scoped_static_mutex_lock scoped_lock; + pthread_mutex_t m_mutex; +}; } // namespace boost #elif defined(BOOST_HAS_WINTHREADS) diff --git a/include/boost/regex/v4/basic_regex_creator.hpp b/include/boost/regex/v4/basic_regex_creator.hpp index efb649cd..c99d320d 100644 --- a/include/boost/regex/v4/basic_regex_creator.hpp +++ b/include/boost/regex/v4/basic_regex_creator.hpp @@ -738,14 +738,14 @@ void basic_regex_creator::fixup_pointers(re_syntax_base* state) case syntax_element_long_set_rep: // set the state_id of this repeat: static_cast(state)->state_id = m_repeater_id++; - // fall through: + BOOST_FALLTHROUGH; case syntax_element_alt: std::memset(static_cast(state)->_map, 0, sizeof(static_cast(state)->_map)); static_cast(state)->can_be_null = 0; - // fall through: + BOOST_FALLTHROUGH; case syntax_element_jump: static_cast(state)->alt.p = getaddress(static_cast(state)->alt.i, state); - // fall through again: + BOOST_FALLTHROUGH; default: if(state->next.i) state->next.p = getaddress(state->next.i, state); @@ -877,6 +877,7 @@ void basic_regex_creator::fixup_recursions(re_syntax_base* state) } } } + break; default: break; } @@ -941,7 +942,7 @@ void basic_regex_creator::create_startmaps(re_syntax_base* state) e.raise(); } } - // fall through: + BOOST_FALLTHROUGH; default: state = state->next.p; } @@ -1153,13 +1154,14 @@ void basic_regex_creator::create_startmap(re_syntax_base* state, break; } m_recursion_checks[recursion_sub] = true; - // fall through, can't handle nested recursion here... + // can't handle nested recursion here... + BOOST_FALLTHROUGH; } case syntax_element_backref: // can be null, and any character can match: if(pnull) *pnull |= mask; - // fall through: + BOOST_FALLTHROUGH; case syntax_element_wild: { // can't be null, any character can match: @@ -1359,7 +1361,7 @@ void basic_regex_creator::create_startmap(re_syntax_base* state, state = state->next.p->next.p; break; } - // otherwise fall through: + BOOST_FALLTHROUGH; default: state = state->next.p; } @@ -1456,6 +1458,7 @@ void basic_regex_creator::set_bad_repeat(re_syntax_base* pt) if(state_id <= sizeof(m_bad_repeats) * CHAR_BIT) m_bad_repeats |= (one << state_id); } + break; default: break; } @@ -1537,7 +1540,7 @@ void basic_regex_creator::probe_leading_repeat(re_syntax_base* st case syntax_element_long_set_rep: if(this->m_has_backrefs == 0) static_cast(state)->leading = true; - // fall through: + BOOST_FALLTHROUGH; default: return; } diff --git a/include/boost/regex/v4/basic_regex_parser.hpp b/include/boost/regex/v4/basic_regex_parser.hpp index 5dfb81e7..4b103f22 100644 --- a/include/boost/regex/v4/basic_regex_parser.hpp +++ b/include/boost/regex/v4/basic_regex_parser.hpp @@ -369,7 +369,7 @@ bool basic_regex_parser::parse_extended() while((m_position != m_end) && !is_separator(*m_position++)){} return true; } - // Otherwise fall through: + BOOST_FALLTHROUGH; default: result = parse_literal(); break; @@ -623,7 +623,7 @@ bool basic_regex_parser::parse_basic_escape() { case 'w': negate = false; - // fall through: + BOOST_FALLTHROUGH; case 'W': { basic_char_set char_set; @@ -640,7 +640,7 @@ bool basic_regex_parser::parse_basic_escape() } case 's': negate = false; - // fall through: + BOOST_FALLTHROUGH; case 'S': return add_emacs_code(negate); case 'c': @@ -672,7 +672,7 @@ bool basic_regex_parser::parse_extended_escape() { case regex_constants::escape_type_not_class: negate = true; - // fall through: + BOOST_FALLTHROUGH; case regex_constants::escape_type_class: { escape_type_class_jump: @@ -742,7 +742,7 @@ escape_type_class_jump: break; case regex_constants::escape_type_not_property: negate = true; - // fall through: + BOOST_FALLTHROUGH; case regex_constants::escape_type_property: { ++m_position; @@ -901,7 +901,7 @@ escape_type_class_jump: case regex_constants::escape_type_control_v: if(0 == (this->flags() & (regbase::main_option_type | regbase::no_perl_ex))) goto escape_type_class_jump; - // fallthrough: + BOOST_FALLTHROUGH; default: this->append_literal(unescape_character()); break; @@ -1070,26 +1070,46 @@ bool basic_regex_parser::parse_repeat_range(bool isbasic) // skip whitespace: while((m_position != m_end) && this->m_traits.isctype(*m_position, this->m_mask_space)) ++m_position; - // fail if at end: if(this->m_position == this->m_end) { - fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); - return false; + if(this->flags() & (regbase::main_option_type | regbase::no_perl_ex)) + { + fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); + return false; + } + // Treat the opening '{' as a literal character, rewind to start of error: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_brace) --m_position; + return parse_literal(); } // get min: v = this->m_traits.toi(m_position, m_end, 10); // skip whitespace: - while((m_position != m_end) && this->m_traits.isctype(*m_position, this->m_mask_space)) - ++m_position; if(v < 0) { - fail(regex_constants::error_badbrace, this->m_position - this->m_base); - return false; + if(this->flags() & (regbase::main_option_type | regbase::no_perl_ex)) + { + fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); + return false; + } + // Treat the opening '{' as a literal character, rewind to start of error: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_brace) --m_position; + return parse_literal(); } - else if(this->m_position == this->m_end) + while((m_position != m_end) && this->m_traits.isctype(*m_position, this->m_mask_space)) + ++m_position; + if(this->m_position == this->m_end) { - fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); - return false; + if(this->flags() & (regbase::main_option_type | regbase::no_perl_ex)) + { + fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); + return false; + } + // Treat the opening '{' as a literal character, rewind to start of error: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_brace) --m_position; + return parse_literal(); } min = v; // see if we have a comma: @@ -1102,8 +1122,15 @@ bool basic_regex_parser::parse_repeat_range(bool isbasic) ++m_position; if(this->m_position == this->m_end) { - fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); - return false; + if(this->flags() & (regbase::main_option_type | regbase::no_perl_ex)) + { + fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); + return false; + } + // Treat the opening '{' as a literal character, rewind to start of error: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_brace) --m_position; + return parse_literal(); } // get the value if any: v = this->m_traits.toi(m_position, m_end, 10); @@ -1120,8 +1147,15 @@ bool basic_regex_parser::parse_repeat_range(bool isbasic) // OK now check trailing }: if(this->m_position == this->m_end) { - fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); - return false; + if(this->flags() & (regbase::main_option_type | regbase::no_perl_ex)) + { + fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); + return false; + } + // Treat the opening '{' as a literal character, rewind to start of error: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_brace) --m_position; + return parse_literal(); } if(isbasic) { @@ -1144,8 +1178,10 @@ bool basic_regex_parser::parse_repeat_range(bool isbasic) ++m_position; else { - fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); - return false; + // Treat the opening '{' as a literal character, rewind to start of error: + --m_position; + while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_brace) --m_position; + return parse_literal(); } // // finally go and add the repeat, unless error: @@ -1959,7 +1995,7 @@ bool basic_regex_parser::parse_perl_extension() { case regex_constants::syntax_or: m_mark_reset = m_mark_count; - // fall through: + BOOST_FALLTHROUGH; case regex_constants::syntax_colon: // // a non-capturing mark: diff --git a/include/boost/regex/v4/regex_format.hpp b/include/boost/regex/v4/regex_format.hpp index 3b1d19da..80c654e4 100644 --- a/include/boost/regex/v4/regex_format.hpp +++ b/include/boost/regex/v4/regex_format.hpp @@ -283,7 +283,8 @@ void basic_regex_formatter::format format_perl(); break; } - // fall through, not a special character: + // not a special character: + BOOST_FALLTHROUGH; default: put(*m_position); ++m_position; @@ -354,7 +355,7 @@ void basic_regex_formatter::format case '{': have_brace = true; ++m_position; - // fall through.... + BOOST_FALLTHROUGH; default: // see if we have a number: { @@ -1064,7 +1065,7 @@ struct format_functor_c_string template OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f, const Traits& t = Traits()) { - typedef typename Match::char_type char_type; + //typedef typename Match::char_type char_type; const charT* end = func; while(*end) ++end; return regex_format_imp(i, m, func, end, f, t); @@ -1083,7 +1084,7 @@ struct format_functor_container template OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f, const Traits& t = Traits()) { - typedef typename Match::char_type char_type; + //typedef typename Match::char_type char_type; return re_detail::regex_format_imp(i, m, func.begin(), func.end(), f, t); } private: diff --git a/include/boost/regex/v4/regex_split.hpp b/include/boost/regex/v4/regex_split.hpp index a7ae350f..534fb58e 100644 --- a/include/boost/regex/v4/regex_split.hpp +++ b/include/boost/regex/v4/regex_split.hpp @@ -107,7 +107,7 @@ std::size_t regex_split(OutputIterator out, std::size_t max_split) { typedef typename std::basic_string::const_iterator ci_t; - typedef typename match_results::allocator_type match_allocator; + //typedef typename match_results::allocator_type match_allocator; ci_t last = s.begin(); std::size_t init_size = max_split; re_detail::split_pred pred(&last, &out, &max_split); diff --git a/src/w32_regex_traits.cpp b/src/w32_regex_traits.cpp index 8c22214d..cf4dc10f 100644 --- a/src/w32_regex_traits.cpp +++ b/src/w32_regex_traits.cpp @@ -283,9 +283,11 @@ BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, l if (r == 0) return def; - LPSTR buf = (LPSTR)_alloca( (r + 1) * 2 ); - if (::WideCharToMultiByte(CP_ACP, 0, wbuf, r, buf, (r + 1) * 2, NULL, NULL) == 0) - return def; + + int buf_size = 1 + ::WideCharToMultiByte(CP_ACP, 0, wbuf, r, NULL, 0, NULL, NULL); + LPSTR buf = (LPSTR)_alloca(buf_size); + if (::WideCharToMultiByte(CP_ACP, 0, wbuf, r, buf, buf_size, NULL, NULL) == 0) + return def; // failed conversion. #endif return std::string(buf); } @@ -485,7 +487,7 @@ BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_tolower(char c, lcid_type idx) return c; if (::WideCharToMultiByte(code_page, 0, &wide_result, 1, result, 2, NULL, NULL) == 0) - return c; + return c; // No single byte lower case equivalent available #endif return result[0]; } @@ -556,7 +558,7 @@ BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_toupper(char c, lcid_type idx) return c; if (::WideCharToMultiByte(code_page, 0, &wide_result, 1, result, 2, NULL, NULL) == 0) - return c; + return c; // No single byte upper case equivalent available. #endif return result[0]; } diff --git a/test/regress/test_icu.cpp b/test/regress/test_icu.cpp index feb5b4a4..6392ade7 100644 --- a/test/regress/test_icu.cpp +++ b/test/regress/test_icu.cpp @@ -73,7 +73,7 @@ void compare_result(const MR1& w1, const MR2& w2, boost::mpl::int_<2> const*) typedef typename MR2::value_type MR2_value_type; typedef typename MR2_value_type::const_iterator MR2_iterator_type; typedef boost::u16_to_u32_iterator iterator_type; - typedef typename MR1::size_type size_type; + //typedef typename MR1::size_type size_type; if(w1.size() != w2.size()) { BOOST_REGEX_TEST_ERROR("Size mismatch in match_results class", UChar32); @@ -103,7 +103,7 @@ void compare_result(const MR1& w1, const MR2& w2, boost::mpl::int_<1> const*) typedef typename MR2::value_type MR2_value_type; typedef typename MR2_value_type::const_iterator MR2_iterator_type; typedef boost::u8_to_u32_iterator iterator_type; - typedef typename MR1::size_type size_type; + //typedef typename MR1::size_type size_type; if(w1.size() != w2.size()) { BOOST_REGEX_TEST_ERROR("Size mismatch in match_results class", UChar32); @@ -358,7 +358,7 @@ void test_icu(const wchar_t&, const test_regex_search_tag& ) void test_icu(const wchar_t&, const test_invalid_regex_tag&) { - typedef boost::u16_to_u32_iterator conv_iterator; + //typedef boost::u16_to_u32_iterator conv_iterator; std::vector< ::UChar32> expression; #ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS expression.assign(test_info::expression().begin(), test_info::expression().end()); diff --git a/test/regress/test_regex_search.hpp b/test/regress/test_regex_search.hpp index 0d87f94c..030a3c1b 100644 --- a/test/regress/test_regex_search.hpp +++ b/test/regress/test_regex_search.hpp @@ -422,7 +422,7 @@ private: template void test_regex_grep(boost::basic_regex& r) { - typedef typename std::basic_string::const_iterator const_iterator; + //typedef typename std::basic_string::const_iterator const_iterator; const std::basic_string& search_text = test_info::search_text(); boost::regex_constants::match_flag_type opts = test_info::match_options(); const int* answer_table = test_info::answer_table(); diff --git a/test/regress/test_simple_repeats.cpp b/test/regress/test_simple_repeats.cpp index 044ca2fd..d0e3a299 100644 --- a/test/regress/test_simple_repeats.cpp +++ b/test/regress/test_simple_repeats.cpp @@ -179,21 +179,20 @@ void test_simple_repeats2() { using namespace boost::regex_constants; - TEST_INVALID_REGEX("a{}", perl); - TEST_INVALID_REGEX("a{", perl); - TEST_INVALID_REGEX("a{1", perl); - TEST_INVALID_REGEX("a{1,", perl); - TEST_INVALID_REGEX("a{1,2", perl); - TEST_INVALID_REGEX("a{ 1 , 2 ", perl); - TEST_INVALID_REGEX("a{ }", perl); - TEST_INVALID_REGEX("a}", perl); + TEST_REGEX_SEARCH("a{}", basic, "a{}", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a{", basic, "a{", match_default, make_array(0, 2, -2, -2)); + TEST_REGEX_SEARCH("a{1", basic, "a{1", match_default, make_array(0, 3, -2, -2)); + TEST_REGEX_SEARCH("a{1,", basic, "a{1,", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a{1,2", basic, "a{1,2", match_default, make_array(0, 5, -2, -2)); + TEST_REGEX_SEARCH("a{ 1 , 2", basic, "a{ 1 , 2", match_default, make_array(0, 8, -2, -2)); + TEST_REGEX_SEARCH("a{ }", basic, "a{ }", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a}", basic, "a}", match_default, make_array(0, 2, -2, -2)); TEST_INVALID_REGEX("{1}", perl); - TEST_INVALID_REGEX("a{b}", perl); - TEST_INVALID_REGEX("a{1b}", perl); - TEST_INVALID_REGEX("a{1,b}", perl); - TEST_INVALID_REGEX("a{1,2v}", perl); + TEST_REGEX_SEARCH("a{b}", basic, "a{b}", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a{1b", basic, "a{1b", match_default, make_array(0, 4, -2, -2)); + TEST_REGEX_SEARCH("a{1,b}", basic, "a{1,b}", match_default, make_array(0, 6, -2, -2)); + TEST_REGEX_SEARCH("a{1,2v}", basic, "a{1,2v}", match_default, make_array(0, 7, -2, -2)); TEST_INVALID_REGEX("a{2,1}", perl); - // now try operator \\{\\} for POSIX basic regexes TEST_REGEX_SEARCH("a\\{2\\}", basic, "a", match_default, make_array(-2, -2)); TEST_REGEX_SEARCH("a\\{2\\}", basic|no_intervals, "a{2}", match_default, make_array(0, 4, -2, -2));