forked from boostorg/regex
Compare commits
16 Commits
svn-branch
...
svn-branch
Author | SHA1 | Date | |
---|---|---|---|
1ad2d60382 | |||
528cf2abb9 | |||
eaaf00a924 | |||
2e41f13526 | |||
e3dfbd0953 | |||
132c39a42c | |||
05636b5c89 | |||
fa96f4edf1 | |||
87d5fd1421 | |||
a2142edcd3 | |||
67f5369cae | |||
446604c734 | |||
f9db065c61 | |||
50892585d3 | |||
d686c89333 | |||
c8e56504d9 |
307
build/Jamfile.v2
307
build/Jamfile.v2
@ -3,10 +3,6 @@
|
||||
# (See accompanying file LICENSE_1_0.txt or copy at
|
||||
# http://www.boost.org/LICENSE_1_0.txt.
|
||||
|
||||
project boost/regex
|
||||
: source-location ../src
|
||||
;
|
||||
|
||||
#
|
||||
# ICU configuration:
|
||||
#
|
||||
@ -14,240 +10,35 @@ if [ modules.peek : ICU_PATH ]
|
||||
{
|
||||
ICU_PATH = [ modules.peek : ICU_PATH ] ;
|
||||
}
|
||||
|
||||
rule check-icu-config ( )
|
||||
{
|
||||
local HAVE_ICU = [ modules.peek : HAVE_ICU ] ;
|
||||
local ICU_LINK = [ modules.peek : ICU_LINK ] ;
|
||||
|
||||
if ! $(gICU_CONFIG_CHECKED)
|
||||
{
|
||||
if $(HAVE_ICU) && ! $(ICU_PATH)
|
||||
{
|
||||
gHAS_ICU = true ;
|
||||
gICU_CORE_LIB = icuuc ;
|
||||
gICU_IN_LIB = icui18n ;
|
||||
gICU_DATA_LIB = icudata ;
|
||||
gICU_CONFIG_CHECKED = true ;
|
||||
}
|
||||
else if $(ICU_PATH)
|
||||
{
|
||||
dir = $(ICU_PATH) ;
|
||||
|
||||
if [ GLOB $(dir)/include/unicode : utypes.h ]
|
||||
{
|
||||
gHAS_ICU = true ;
|
||||
|
||||
# try and find ICU libraries, look for NT versions first:
|
||||
if $(ICU_LINK)
|
||||
{
|
||||
gICU_LIBS += <linkflags>$(ICU_LINK) ;
|
||||
}
|
||||
else if [ GLOB $(dir)/lib64 : icuuc.* ]
|
||||
{
|
||||
gICU_CORE_LIB = icuuc ;
|
||||
}
|
||||
else if [ GLOB $(dir)/lib : icuuc.* ]
|
||||
{
|
||||
gICU_CORE_LIB = icuuc ;
|
||||
}
|
||||
else if [ GLOB $(dir)/lib : libicuuc.* ]
|
||||
{
|
||||
gICU_CORE_LIB = icuuc ;
|
||||
}
|
||||
else if [ GLOB $(ICU_PATH)/lib : cygicuuc*.dll ]
|
||||
{
|
||||
gICU_CORE_LIB = cygicuuc.dll ;
|
||||
gICU_CYGWIN = true ;
|
||||
}
|
||||
else
|
||||
{
|
||||
ECHO warning: ICU shared common library not found in path. ;
|
||||
ECHO hint: If the regex library fails to link then try again ;
|
||||
ECHO with the environment variable ICU_LINK set to contain ;
|
||||
ECHO the linker options required to link to ICU. ;
|
||||
ECHO Defaulting to look for libicuuc ... ;
|
||||
gICU_CORE_LIB = icuuc ;
|
||||
}
|
||||
|
||||
if $(ICU_LINK)
|
||||
{
|
||||
# nothing to do, it's already been done!
|
||||
# gICU_LIBS += <linkflags>$(ICU_LINK) ;
|
||||
}
|
||||
else if [ GLOB $(dir)/lib : icuin.* ]
|
||||
{
|
||||
gICU_IN_LIB = icuin ;
|
||||
}
|
||||
else if [ GLOB $(dir)/lib : icui18n.* ]
|
||||
{
|
||||
gICU_IN_LIB = icui18n ;
|
||||
}
|
||||
else if [ GLOB $(dir)/lib64 : libicui18n.* ]
|
||||
{
|
||||
gICU_IN_LIB = icui18n ;
|
||||
}
|
||||
else if [ GLOB $(dir)/lib : libicui18n.* ]
|
||||
{
|
||||
gICU_IN_LIB = icui18n ;
|
||||
}
|
||||
else if [ GLOB $(ICU_PATH)/lib : cygicuin*.dll ]
|
||||
{
|
||||
gICU_IN_LIB = cygicuin.dll ;
|
||||
gICU_CYGWIN = true ;
|
||||
}
|
||||
else
|
||||
{
|
||||
ECHO warning: ICU shared i18n library not found in path. ;
|
||||
ECHO hint: If the regex library fails to link then try again ;
|
||||
ECHO with the environment variable ICU_LINK set to contain ;
|
||||
ECHO the linker options required to link to ICU. ;
|
||||
ECHO Defaulting to look for libicui18n ... ;
|
||||
gICU_IN_LIB = icui18n ;
|
||||
}
|
||||
#Added by Tommy Nordgren - libicudata muct be linked against on Mac OS X
|
||||
if $(ICU_LINK)
|
||||
{
|
||||
# nothing to do, it's already been done!
|
||||
# gICU_LIBS += <linkflags>$(ICU_LINK) ;
|
||||
}
|
||||
else if [ GLOB $(dir)/lib64 : icudt.* ]
|
||||
{
|
||||
gICU_DATA_LIB = icudt ;
|
||||
}
|
||||
else if [ GLOB $(dir)/lib : icudt.* ]
|
||||
{
|
||||
gICU_DATA_LIB = icudt ;
|
||||
}
|
||||
else if [ GLOB $(dir)/lib : libicudata.* ]
|
||||
{
|
||||
gICU_DATA_LIB = icudata ;
|
||||
}
|
||||
else if [ GLOB $(ICU_PATH)/lib : cygicudt*.dll ]
|
||||
{
|
||||
gICU_DATA_LIB = cygicudt.dll ;
|
||||
gICU_CYGWIN = true ;
|
||||
}
|
||||
else
|
||||
{
|
||||
local os = [ modules.peek : OS ] ;
|
||||
echo $(os) ;
|
||||
if $(os) != "DARWIN"
|
||||
{
|
||||
ECHO warning: ICU shared data library not found in path. ;
|
||||
ECHO hint: If the regex library fails to link then try again ;
|
||||
ECHO with the environment variable ICU_LINK set to contain ;
|
||||
ECHO the linker options required to link to ICU. ;
|
||||
}
|
||||
else
|
||||
{
|
||||
ECHO warning: ICU shared data library not found in path. ;
|
||||
ECHO hint: If the regex library fails to link then try again ;
|
||||
ECHO with the environment variable ICU_LINK set to contain ;
|
||||
ECHO the linker options required to link to ICU. ;
|
||||
ECHO Defaulting to look for libicudata ... ;
|
||||
gICU_DATA_LIB = icudata ;
|
||||
}
|
||||
}
|
||||
#End of addition by Tommy Nordgren
|
||||
}
|
||||
}
|
||||
|
||||
gICU_CONFIG_CHECKED = true ;
|
||||
}
|
||||
|
||||
if $(gHAS_ICU)
|
||||
{
|
||||
message icu_config ;
|
||||
message icu_config2
|
||||
: Note: Building Boost.Regex with Unicode/ICU support enabled
|
||||
: " Using ICU in " $(ICU_PATH:J=" ")/include ;
|
||||
return true ;
|
||||
}
|
||||
else
|
||||
{
|
||||
message icu_config
|
||||
: "warning: Building Boost.Regex with the optional Unicode/ICU support disabled."
|
||||
: "note: Please refer to the Boost.Regex documentation for more information"
|
||||
: "note: this is a strictly optional feature." ;
|
||||
|
||||
if $(ICU_PATH)
|
||||
{
|
||||
message icu_config2
|
||||
: warning! ICU configuration failed
|
||||
: " Couldn't find utypes.h in " $(ICU_PATH:J=" ")/include/unicode ;
|
||||
}
|
||||
else
|
||||
{
|
||||
message icu_config2 ;
|
||||
}
|
||||
}
|
||||
if [ modules.peek : ICU_LINK ]
|
||||
{
|
||||
ICU_LINK = [ modules.peek : ICU_LINK ] ;
|
||||
}
|
||||
|
||||
explicit icu_config ;
|
||||
explicit icu_config2 ;
|
||||
|
||||
if [ check-icu-config ]
|
||||
if $(ICU_LINK)
|
||||
{
|
||||
if $(gHAS_ICU)
|
||||
{
|
||||
BOOST_REGEX_ICU_OPTS = "<target-os>freebsd:<include>/usr/local/include" ;
|
||||
ICU_SEARCH_OPTS = "<target-os>freebsd:<search>$(ICU_PATH)/lib" ;
|
||||
BOOST_REGEX_ICU_OPTS += "<define>BOOST_HAS_ICU=1" ;
|
||||
BOOST_REGEX_ICU_OPTS += "$(gICU_LIBS)" ;
|
||||
|
||||
if $(ICU_PATH)
|
||||
{
|
||||
# If ICU_PATH is specified on the command line, then it's
|
||||
# relative to the current directory, while paths specified
|
||||
# in a Jamfile are relative to that Jamfile. So, to
|
||||
# avoid confusing the user if he's not running from
|
||||
# libs/regex/build, explicitly root this.
|
||||
ICU_PATH = [ path.native
|
||||
[ path.root [ path.make $(ICU_PATH) ] [ path.pwd ] ] ] ;
|
||||
if $(ICU_PATH) != "/usr" && $(ICU_PATH) != "/usr/local"
|
||||
{
|
||||
BOOST_REGEX_ICU_OPTS += "<include>$(ICU_PATH)/include" ;
|
||||
ICU_SEARCH_OPTS = <search>$(ICU_PATH)/lib ;
|
||||
}
|
||||
}
|
||||
|
||||
if $(gICU_CYGWIN)
|
||||
{
|
||||
if $(gICU_CORE_LIB)
|
||||
{
|
||||
BOOST_REGEX_ICU_OPTS += "<linkflags>$(gICU_CORE_LIB) ;
|
||||
}
|
||||
if $(gICU_IN_LIB)
|
||||
{
|
||||
BOOST_REGEX_ICU_OPTS += "<linkflags>$(gICU_IN_LIB) ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if $(gICU_CORE_LIB)
|
||||
{
|
||||
lib icucore : : <name>$(gICU_CORE_LIB) $(ICU_SEARCH_OPTS) <link>shared ;
|
||||
ICU_EXTRA_SOURCE = icucore ;
|
||||
explicit icucore ;
|
||||
}
|
||||
if $(gICU_IN_LIB)
|
||||
{
|
||||
lib icuin : : <name>$(gICU_IN_LIB) $(ICU_SEARCH_OPTS) <link>shared ;
|
||||
ICU_EXTRA_SOURCE += icuin ;
|
||||
explicit icuin ;
|
||||
}
|
||||
#Added by Tommy Nordgren libicudata must be linked against on Mac OS X
|
||||
if $(gICU_DATA_LIB)
|
||||
{
|
||||
lib icudata : : <name>$(gICU_DATA_LIB) $(ICU_SEARCH_OPTS) <link>shared ;
|
||||
ICU_EXTRA_SOURCE += icudata ;
|
||||
explicit icudata ;
|
||||
}
|
||||
#End of addition by Tommy Nordgren
|
||||
}
|
||||
}
|
||||
ICU_OPTS = <include>$(ICU_PATH)/include <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin <define>BOOST_HAS_ICU=1 <runtime-link>shared ;
|
||||
}
|
||||
else
|
||||
{
|
||||
lib icuuc : : <search>$(ICU_PATH)/lib <link>shared <runtime-link>shared ;
|
||||
lib icuuc : : <toolset>msvc <variant>debug <name>icuucd <search>$(ICU_PATH)/lib <link>shared <runtime-link>shared ;
|
||||
lib icuuc : : <name>this_is_an_invalid_library_name ;
|
||||
lib icudt : : <search>$(ICU_PATH)/lib <name>icudata <link>shared <runtime-link>shared ;
|
||||
lib icudt : : <search>$(ICU_PATH)/lib <name>icudt <toolset>msvc <link>shared <runtime-link>shared ;
|
||||
lib icudt : : <name>this_is_an_invalid_library_name ;
|
||||
lib icuin : : <search>$(ICU_PATH)/lib <name>icui18n <link>shared <runtime-link>shared ;
|
||||
lib icuin : : <toolset>msvc <variant>debug <name>icuind <search>$(ICU_PATH)/lib <link>shared <runtime-link>shared ;
|
||||
lib icuin : : <toolset>msvc <variant>release <name>icuin <search>$(ICU_PATH)/lib <link>shared <runtime-link>shared ;
|
||||
lib icuin : : <name>this_is_an_invalid_library_name ;
|
||||
|
||||
ICU_OPTS = <include>$(ICU_PATH)/include <library>icuuc/<link>shared/<runtime-link>shared <library>icudt/<link>shared/<runtime-link>shared <library>icuin/<link>shared/<runtime-link>shared <dll-path>$(ICU_PATH)/bin <define>BOOST_HAS_ICU=1 <runtime-link>shared ;
|
||||
}
|
||||
|
||||
exe has_icu : ./has_icu_test.cpp : $(ICU_OPTS) ;
|
||||
explicit has_icu ;
|
||||
|
||||
alias icu_options : : : : [ check-target-builds has_icu : $(ICU_OPTS) : ] ;
|
||||
|
||||
SOURCES =
|
||||
c_regex_traits.cpp
|
||||
@ -269,59 +60,13 @@ SOURCES =
|
||||
usinstances.cpp ;
|
||||
|
||||
|
||||
lib boost_regex : ../src/$(SOURCES) $(ICU_EXTRA_SOURCE) icu_config2 icu_config
|
||||
lib boost_regex : ../src/$(SOURCES) icu_options
|
||||
:
|
||||
#<link>static:<define>BOOST_REGEX_NO_LIB=1
|
||||
#<link>static:<define>BOOST_REGEX_STATIC_LINK=1
|
||||
<link>shared:<define>BOOST_REGEX_DYN_LINK=1
|
||||
<toolset>gcc-mw:<link>static
|
||||
<toolset>gcc-mingw:<link>static
|
||||
<toolset>gcc-cygwin:<link>static
|
||||
$(BOOST_REGEX_ICU_OPTS)
|
||||
<conditional>@force-shared-linking
|
||||
;
|
||||
|
||||
shared-linking-warning-emitted = ;
|
||||
|
||||
# The ICU is shipped as shared libraries with dynamic runtime.
|
||||
# If Boost.Regex is built against static runtime, the combination
|
||||
# will not work. The below rule forces shared runtime, and
|
||||
# prints an explanation.
|
||||
rule force-shared-linking ( properties * )
|
||||
{
|
||||
if $(gHAS_ICU)
|
||||
{
|
||||
if <runtime-link>static in $(properties)
|
||||
{
|
||||
if ! $(shared-linking-warning-emitted)
|
||||
{
|
||||
shared-linking-warning-emitted = 1 ;
|
||||
ECHO "warning: forcing runtime-link=shared for Boost.Regex" ;
|
||||
ECHO "warning: this is required when using the ICU library" ;
|
||||
}
|
||||
}
|
||||
return <runtime-link>shared ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
alias icu_options : $(ICU_EXTRA_SOURCE) : : : $(BOOST_REGEX_ICU_OPTS) ;
|
||||
explicit icu_options ;
|
||||
|
||||
boost-install boost_regex ;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
26
build/has_icu_test.cpp
Normal file
26
build/has_icu_test.cpp
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2010
|
||||
* John Maddock
|
||||
*
|
||||
* Use, modification and distribution are subject to 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)
|
||||
*
|
||||
*/
|
||||
|
||||
#include <unicode/uversion.h>
|
||||
#include <unicode/utypes.h>
|
||||
#include <unicode/uchar.h>
|
||||
#include <unicode/coll.h>
|
||||
|
||||
#if defined(_MSC_VER) && !defined(_DLL)
|
||||
#error "Mixing ICU with a static runtime doesn't work"
|
||||
#endif
|
||||
|
||||
int main()
|
||||
{
|
||||
UErrorCode err = U_ZERO_ERROR;
|
||||
UChar32 c = ::u_charFromName(U_UNICODE_CHAR_NAME, "GREEK SMALL LETTER ALPHA", &err);
|
||||
return err;
|
||||
}
|
@ -15,6 +15,21 @@ 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.44]
|
||||
|
||||
Fixed issues:
|
||||
[@https://svn.boost.org/trac/boost/ticket/4215 #4215],
|
||||
[@https://svn.boost.org/trac/boost/ticket/4212 #4212],
|
||||
[@https://svn.boost.org/trac/boost/ticket/4191 #4191],
|
||||
[@https://svn.boost.org/trac/boost/ticket/4132 #4132],
|
||||
[@https://svn.boost.org/trac/boost/ticket/4123 #4123],
|
||||
[@https://svn.boost.org/trac/boost/ticket/4114 #4114],
|
||||
[@https://svn.boost.org/trac/boost/ticket/4036 #4036],
|
||||
[@https://svn.boost.org/trac/boost/ticket/4020 #4020],
|
||||
[@https://svn.boost.org/trac/boost/ticket/3941 #3941],
|
||||
[@https://svn.boost.org/trac/boost/ticket/3902 #3902],
|
||||
[@https://svn.boost.org/trac/boost/ticket/3890 #3890]
|
||||
|
||||
[h4 Boost 1.42]
|
||||
|
||||
* Added support for Functors rather than strings as format expressions.
|
||||
|
@ -28,7 +28,7 @@
|
||||
Example Programs</a>
|
||||
</h3></div></div></div>
|
||||
<a name="boost_regex.background_information.examples.test_programs"></a><h5>
|
||||
<a name="id939918"></a>
|
||||
<a name="id829899"></a>
|
||||
<a class="link" href="examples.html#boost_regex.background_information.examples.test_programs">Test
|
||||
Programs</a>
|
||||
</h5>
|
||||
@ -107,7 +107,7 @@
|
||||
Files: <a href="../../../../test/captures/captures_test.cpp" target="_top">captures_test.cpp</a>.
|
||||
</p>
|
||||
<a name="boost_regex.background_information.examples.example_programs"></a><h5>
|
||||
<a name="id940222"></a>
|
||||
<a name="id830203"></a>
|
||||
<a class="link" href="examples.html#boost_regex.background_information.examples.example_programs">Example
|
||||
programs</a>
|
||||
</h5>
|
||||
@ -133,7 +133,7 @@
|
||||
Files: <a href="../../../../example/timer/regex_timer.cpp" target="_top">regex_timer.cpp</a>.
|
||||
</p>
|
||||
<a name="boost_regex.background_information.examples.code_snippets"></a><h5>
|
||||
<a name="id940281"></a>
|
||||
<a name="id830261"></a>
|
||||
<a class="link" href="examples.html#boost_regex.background_information.examples.code_snippets">Code
|
||||
snippets</a>
|
||||
</h5>
|
||||
|
@ -35,8 +35,26 @@
|
||||
<p>
|
||||
All issues including closed ones can be viewed <a href="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" target="_top">here</a>.
|
||||
</p>
|
||||
<a name="boost_regex.background_information.history.boost_1_44"></a><h5>
|
||||
<a name="id834169"></a>
|
||||
<a class="link" href="history.html#boost_regex.background_information.history.boost_1_44">Boost
|
||||
1.44</a>
|
||||
</h5>
|
||||
<p>
|
||||
Fixed issues: <a href="https://svn.boost.org/trac/boost/ticket/4215" target="_top">#4215</a>,
|
||||
<a href="https://svn.boost.org/trac/boost/ticket/4212" target="_top">#4212</a>,
|
||||
<a href="https://svn.boost.org/trac/boost/ticket/4191" target="_top">#4191</a>,
|
||||
<a href="https://svn.boost.org/trac/boost/ticket/4132" target="_top">#4132</a>,
|
||||
<a href="https://svn.boost.org/trac/boost/ticket/4123" target="_top">#4123</a>,
|
||||
<a href="https://svn.boost.org/trac/boost/ticket/4114" target="_top">#4114</a>,
|
||||
<a href="https://svn.boost.org/trac/boost/ticket/4036" target="_top">#4036</a>,
|
||||
<a href="https://svn.boost.org/trac/boost/ticket/4020" target="_top">#4020</a>,
|
||||
<a href="https://svn.boost.org/trac/boost/ticket/3941" target="_top">#3941</a>,
|
||||
<a href="https://svn.boost.org/trac/boost/ticket/3902" target="_top">#3902</a>,
|
||||
<a href="https://svn.boost.org/trac/boost/ticket/3890" target="_top">#3890</a>
|
||||
</p>
|
||||
<a name="boost_regex.background_information.history.boost_1_42"></a><h5>
|
||||
<a name="id941795"></a>
|
||||
<a name="id834238"></a>
|
||||
<a class="link" href="history.html#boost_regex.background_information.history.boost_1_42">Boost
|
||||
1.42</a>
|
||||
</h5>
|
||||
@ -65,7 +83,7 @@
|
||||
</li>
|
||||
</ul></div>
|
||||
<a name="boost_regex.background_information.history.boost_1_40"></a><h5>
|
||||
<a name="id941874"></a>
|
||||
<a name="id834317"></a>
|
||||
<a class="link" href="history.html#boost_regex.background_information.history.boost_1_40">Boost
|
||||
1.40</a>
|
||||
</h5>
|
||||
@ -74,7 +92,7 @@
|
||||
branch resets and recursive regular expressions.
|
||||
</li></ul></div>
|
||||
<a name="boost_regex.background_information.history.boost_1_38"></a><h5>
|
||||
<a name="id941895"></a>
|
||||
<a name="id834338"></a>
|
||||
<a class="link" href="history.html#boost_regex.background_information.history.boost_1_38">Boost
|
||||
1.38</a>
|
||||
</h5>
|
||||
@ -101,7 +119,7 @@
|
||||
</li>
|
||||
</ul></div>
|
||||
<a name="boost_regex.background_information.history.boost_1_34"></a><h5>
|
||||
<a name="id942223"></a>
|
||||
<a name="id834416"></a>
|
||||
<a class="link" href="history.html#boost_regex.background_information.history.boost_1_34">Boost
|
||||
1.34</a>
|
||||
</h5>
|
||||
@ -124,7 +142,7 @@
|
||||
</li>
|
||||
</ul></div>
|
||||
<a name="boost_regex.background_information.history.boost_1_33_1"></a><h5>
|
||||
<a name="id942254"></a>
|
||||
<a name="id834447"></a>
|
||||
<a class="link" href="history.html#boost_regex.background_information.history.boost_1_33_1">Boost
|
||||
1.33.1</a>
|
||||
</h5>
|
||||
@ -194,7 +212,7 @@
|
||||
</li>
|
||||
</ul></div>
|
||||
<a name="boost_regex.background_information.history.boost_1_33_0"></a><h5>
|
||||
<a name="id942334"></a>
|
||||
<a name="id834526"></a>
|
||||
<a class="link" href="history.html#boost_regex.background_information.history.boost_1_33_0">Boost
|
||||
1.33.0</a>
|
||||
</h5>
|
||||
@ -249,7 +267,7 @@
|
||||
</li>
|
||||
</ul></div>
|
||||
<a name="boost_regex.background_information.history.boost_1_32_1"></a><h5>
|
||||
<a name="id942392"></a>
|
||||
<a name="id834585"></a>
|
||||
<a class="link" href="history.html#boost_regex.background_information.history.boost_1_32_1">Boost
|
||||
1.32.1</a>
|
||||
</h5>
|
||||
@ -257,7 +275,7 @@
|
||||
Fixed bug in partial matches of bounded repeats of '.'.
|
||||
</li></ul></div>
|
||||
<a name="boost_regex.background_information.history.boost_1_31_0"></a><h5>
|
||||
<a name="id942413"></a>
|
||||
<a name="id834605"></a>
|
||||
<a class="link" href="history.html#boost_regex.background_information.history.boost_1_31_0">Boost
|
||||
1.31.0</a>
|
||||
</h5>
|
||||
|
@ -58,7 +58,7 @@
|
||||
There are three separate localization mechanisms supported by Boost.Regex:
|
||||
</p>
|
||||
<a name="boost_regex.background_information.locale.win32_localization_model_"></a><h5>
|
||||
<a name="id935581"></a>
|
||||
<a name="id826760"></a>
|
||||
<a class="link" href="locale.html#boost_regex.background_information.locale.win32_localization_model_">Win32
|
||||
localization model.</a>
|
||||
</h5>
|
||||
@ -90,7 +90,7 @@
|
||||
are treated as "unknown" graphic characters.
|
||||
</p>
|
||||
<a name="boost_regex.background_information.locale.c_localization_model_"></a><h5>
|
||||
<a name="id935736"></a>
|
||||
<a name="id826914"></a>
|
||||
<a class="link" href="locale.html#boost_regex.background_information.locale.c_localization_model_">C
|
||||
localization model.</a>
|
||||
</h5>
|
||||
@ -114,7 +114,7 @@
|
||||
libraries including version 1 of this library.
|
||||
</p>
|
||||
<a name="boost_regex.background_information.locale.c___localization_model_"></a><h5>
|
||||
<a name="id935804"></a>
|
||||
<a name="id826983"></a>
|
||||
<a class="link" href="locale.html#boost_regex.background_information.locale.c___localization_model_">C++
|
||||
localization model.</a>
|
||||
</h5>
|
||||
@ -151,7 +151,7 @@
|
||||
in your code. The best way to ensure this is to add the #define to <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">/</span><span class="identifier">user</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>.
|
||||
</p>
|
||||
<a name="boost_regex.background_information.locale.providing_a_message_catalogue"></a><h5>
|
||||
<a name="id937267"></a>
|
||||
<a name="id827284"></a>
|
||||
<a class="link" href="locale.html#boost_regex.background_information.locale.providing_a_message_catalogue">Providing
|
||||
a message catalogue</a>
|
||||
</h5>
|
||||
|
@ -28,7 +28,7 @@
|
||||
Conformance</a>
|
||||
</h3></div></div></div>
|
||||
<a name="boost_regex.background_information.standards.c__"></a><h5>
|
||||
<a name="id940910"></a>
|
||||
<a name="id830890"></a>
|
||||
<a class="link" href="standards.html#boost_regex.background_information.standards.c__">C++</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -36,7 +36,7 @@
|
||||
Report on C++ Library Extensions</a>.
|
||||
</p>
|
||||
<a name="boost_regex.background_information.standards.ecmascript___javascript"></a><h5>
|
||||
<a name="id940931"></a>
|
||||
<a name="id830912"></a>
|
||||
<a class="link" href="standards.html#boost_regex.background_information.standards.ecmascript___javascript">ECMAScript
|
||||
/ JavaScript</a>
|
||||
</h5>
|
||||
@ -49,7 +49,7 @@
|
||||
rather than a Unicode escape sequence; use \x{DDDD} for Unicode escape sequences.
|
||||
</p>
|
||||
<a name="boost_regex.background_information.standards.perl"></a><h5>
|
||||
<a name="id940952"></a>
|
||||
<a name="id830932"></a>
|
||||
<a class="link" href="standards.html#boost_regex.background_information.standards.perl">Perl</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -61,8 +61,19 @@
|
||||
<p>
|
||||
(??{code}) Not implementable in a compiled strongly typed language.
|
||||
</p>
|
||||
<p>
|
||||
(*VERB) The <a href="http://perldoc.perl.org/perlre.html#Special-Backtracking-Control-Verbs" target="_top">backtracking
|
||||
control verbs</a> are not recognised or implemented at this time.
|
||||
</p>
|
||||
<p>
|
||||
In addition the following features behave slightly differently from Perl:
|
||||
</p>
|
||||
<p>
|
||||
^ $ \Z These recognise any line termination sequence, and not just \n: see
|
||||
the Unicode requirements below.
|
||||
</p>
|
||||
<a name="boost_regex.background_information.standards.posix"></a><h5>
|
||||
<a name="id940976"></a>
|
||||
<a name="id830972"></a>
|
||||
<a class="link" href="standards.html#boost_regex.background_information.standards.posix">POSIX</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -82,7 +93,7 @@
|
||||
a custom traits class.
|
||||
</p>
|
||||
<a name="boost_regex.background_information.standards.unicode"></a><h5>
|
||||
<a name="id941000"></a>
|
||||
<a name="id830996"></a>
|
||||
<a class="link" href="standards.html#boost_regex.background_information.standards.unicode">Unicode</a>
|
||||
</h5>
|
||||
<p>
|
||||
|
@ -35,7 +35,7 @@
|
||||
accessed.
|
||||
</p>
|
||||
<a name="boost_regex.captures.marked_sub_expressions"></a><h5>
|
||||
<a name="id782686"></a>
|
||||
<a name="id672206"></a>
|
||||
<a class="link" href="captures.html#boost_regex.captures.marked_sub_expressions">Marked sub-expressions</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -218,7 +218,7 @@
|
||||
output stream.
|
||||
</p>
|
||||
<a name="boost_regex.captures.unmatched_sub_expressions"></a><h5>
|
||||
<a name="id783142"></a>
|
||||
<a name="id672662"></a>
|
||||
<a class="link" href="captures.html#boost_regex.captures.unmatched_sub_expressions">Unmatched Sub-Expressions</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -231,7 +231,7 @@
|
||||
you can determine which sub-expressions matched by accessing the <code class="computeroutput"><span class="identifier">sub_match</span><span class="special">::</span><span class="identifier">matched</span></code> data member.
|
||||
</p>
|
||||
<a name="boost_regex.captures.repeated_captures"></a><h5>
|
||||
<a name="id783181"></a>
|
||||
<a name="id672701"></a>
|
||||
<a class="link" href="captures.html#boost_regex.captures.repeated_captures">Repeated Captures</a>
|
||||
</h5>
|
||||
<p>
|
||||
|
@ -32,7 +32,7 @@
|
||||
'$', '\', '(', ')', '?', and ':'.
|
||||
</p>
|
||||
<a name="boost_regex.format.boost_format_syntax.grouping"></a><h5>
|
||||
<a name="id803969"></a>
|
||||
<a name="id693208"></a>
|
||||
<a class="link" href="boost_format_syntax.html#boost_regex.format.boost_format_syntax.grouping">Grouping</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -40,7 +40,7 @@
|
||||
you want a to output literal parenthesis.
|
||||
</p>
|
||||
<a name="boost_regex.format.boost_format_syntax.conditionals"></a><h5>
|
||||
<a name="id803986"></a>
|
||||
<a name="id693225"></a>
|
||||
<a class="link" href="boost_format_syntax.html#boost_regex.format.boost_format_syntax.conditionals">Conditionals</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -79,7 +79,7 @@
|
||||
?{NAME}true-expression:false-expression
|
||||
</p>
|
||||
<a name="boost_regex.format.boost_format_syntax.placeholder_sequences"></a><h5>
|
||||
<a name="id804038"></a>
|
||||
<a name="id693278"></a>
|
||||
<a class="link" href="boost_format_syntax.html#boost_regex.format.boost_format_syntax.placeholder_sequences">Placeholder
|
||||
Sequences</a>
|
||||
</h5>
|
||||
@ -319,7 +319,7 @@
|
||||
as a literal.
|
||||
</p>
|
||||
<a name="boost_regex.format.boost_format_syntax.escape_sequences"></a><h5>
|
||||
<a name="id804382"></a>
|
||||
<a name="id693621"></a>
|
||||
<a class="link" href="boost_format_syntax.html#boost_regex.format.boost_format_syntax.escape_sequences">Escape
|
||||
Sequences</a>
|
||||
</h5>
|
||||
|
@ -49,7 +49,7 @@
|
||||
file before you can use it, instructions for specific platforms are as follows:
|
||||
</p>
|
||||
<a name="boost_regex.install.building_with_bjam"></a><h5>
|
||||
<a name="id779877"></a>
|
||||
<a name="id668332"></a>
|
||||
<a class="link" href="install.html#boost_regex.install.building_with_bjam">Building with bjam</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -58,7 +58,7 @@
|
||||
started guide</a> for more information.
|
||||
</p>
|
||||
<a name="boost_regex.install.building_with_unicode_and_icu_support"></a><h5>
|
||||
<a name="id779901"></a>
|
||||
<a name="id668356"></a>
|
||||
<a class="link" href="install.html#boost_regex.install.building_with_unicode_and_icu_support">Building
|
||||
With Unicode and ICU Support</a>
|
||||
</h5>
|
||||
@ -96,11 +96,11 @@
|
||||
ICU you are using is binary compatible with the toolset you use to build Boost.
|
||||
</p>
|
||||
<a name="boost_regex.install.building_via_makefiles"></a><h5>
|
||||
<a name="id780020"></a>
|
||||
<a name="id668475"></a>
|
||||
<a class="link" href="install.html#boost_regex.install.building_via_makefiles">Building via makefiles</a>
|
||||
</h5>
|
||||
<a name="boost_regex.install.borland_c___builder_"></a><h6>
|
||||
<a name="id780033"></a>
|
||||
<a name="id668488"></a>
|
||||
<a class="link" href="install.html#boost_regex.install.borland_c___builder_">Borland C++ Builder:</a>
|
||||
</h6>
|
||||
<div class="itemizedlist"><ul type="disc">
|
||||
@ -166,7 +166,7 @@
|
||||
a lot in compile times!
|
||||
</p>
|
||||
<a name="boost_regex.install.microsoft_visual_c___6__7__7_1_and_8"></a><h5>
|
||||
<a name="id780272"></a>
|
||||
<a name="id668727"></a>
|
||||
<a class="link" href="install.html#boost_regex.install.microsoft_visual_c___6__7__7_1_and_8">Microsoft
|
||||
Visual C++ 6, 7, 7.1 and 8</a>
|
||||
</h5>
|
||||
@ -253,7 +253,7 @@
|
||||
</li>
|
||||
</ul></div>
|
||||
<a name="boost_regex.install.gcc_2_95_and_later_"></a><h6>
|
||||
<a name="id780471"></a>
|
||||
<a name="id668926"></a>
|
||||
<a class="link" href="install.html#boost_regex.install.gcc_2_95_and_later_">GCC(2.95 and later)</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -302,7 +302,7 @@
|
||||
see the <a href="../../../../config/index.html" target="_top">config library documentation</a>.
|
||||
</p>
|
||||
<a name="boost_regex.install.sun_workshop_6_1"></a><h6>
|
||||
<a name="id780597"></a>
|
||||
<a name="id669052"></a>
|
||||
<a class="link" href="install.html#boost_regex.install.sun_workshop_6_1">Sun Workshop 6.1</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -347,7 +347,7 @@
|
||||
will build v9 variants of the regex library named libboost_regex_v9.a etc.
|
||||
</p>
|
||||
<a name="boost_regex.install.makefiles_for_other_compilers"></a><h6>
|
||||
<a name="id780741"></a>
|
||||
<a name="id669196"></a>
|
||||
<a class="link" href="install.html#boost_regex.install.makefiles_for_other_compilers">Makefiles
|
||||
for Other compilers</a>
|
||||
</h6>
|
||||
|
@ -27,7 +27,7 @@
|
||||
<a name="boost_regex.ref.bad_expression"></a><a class="link" href="bad_expression.html" title="bad_expression"> bad_expression</a>
|
||||
</h3></div></div></div>
|
||||
<a name="boost_regex.ref.bad_expression.synopsis"></a><h5>
|
||||
<a name="id889187"></a>
|
||||
<a name="id779033"></a>
|
||||
<a class="link" href="bad_expression.html#boost_regex.ref.bad_expression.synopsis">Synopsis</a>
|
||||
</h5>
|
||||
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">pattern_except</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
|
||||
@ -54,7 +54,7 @@
|
||||
<span class="special">}</span> <span class="comment">// namespace boost
|
||||
</span></pre>
|
||||
<a name="boost_regex.ref.bad_expression.description"></a><h5>
|
||||
<a name="id889552"></a>
|
||||
<a name="id779394"></a>
|
||||
<a class="link" href="bad_expression.html#boost_regex.ref.bad_expression.description">Description</a>
|
||||
</h5>
|
||||
<pre class="programlisting"><span class="identifier">regex_error</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">error_type</span> <span class="identifier">err</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span> <span class="identifier">pos</span><span class="special">);</span>
|
||||
|
@ -27,7 +27,7 @@
|
||||
<a name="boost_regex.ref.basic_regex"></a><a class="link" href="basic_regex.html" title="basic_regex"> basic_regex</a>
|
||||
</h3></div></div></div>
|
||||
<a name="boost_regex.ref.basic_regex.synopsis"></a><h5>
|
||||
<a name="id804725"></a>
|
||||
<a name="id693964"></a>
|
||||
<a class="link" href="basic_regex.html#boost_regex.ref.basic_regex.synopsis">Synopsis</a>
|
||||
</h5>
|
||||
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
|
||||
@ -244,7 +244,7 @@
|
||||
<span class="special">}</span> <span class="comment">// namespace boost
|
||||
</span></pre>
|
||||
<a name="boost_regex.ref.basic_regex.description"></a><h5>
|
||||
<a name="id810064"></a>
|
||||
<a name="id699440"></a>
|
||||
<a class="link" href="basic_regex.html#boost_regex.ref.basic_regex.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -327,7 +327,7 @@
|
||||
<code class="computeroutput"><span class="identifier">basic_regex</span></code>.
|
||||
</p>
|
||||
<div class="table">
|
||||
<a name="id811975"></a><p class="title"><b>Table 1. basic_regex default construction postconditions</b></p>
|
||||
<a name="id702443"></a><p class="title"><b>Table 1. basic_regex default construction postconditions</b></p>
|
||||
<div class="table-contents"><table class="table" summary="basic_regex default construction postconditions">
|
||||
<colgroup>
|
||||
<col>
|
||||
@ -407,7 +407,7 @@
|
||||
flags</a> specified in <span class="emphasis"><em>f</em></span>.
|
||||
</p>
|
||||
<div class="table">
|
||||
<a name="id812272"></a><p class="title"><b>Table 2. Postconditions for basic_regex construction</b></p>
|
||||
<a name="id702741"></a><p class="title"><b>Table 2. Postconditions for basic_regex construction</b></p>
|
||||
<div class="table-contents"><table class="table" summary="Postconditions for basic_regex construction">
|
||||
<colgroup>
|
||||
<col>
|
||||
@ -512,7 +512,7 @@
|
||||
specified in <span class="emphasis"><em>f</em></span>.
|
||||
</p>
|
||||
<div class="table">
|
||||
<a name="id812685"></a><p class="title"><b>Table 3. Postconditions for basic_regex construction</b></p>
|
||||
<a name="id703153"></a><p class="title"><b>Table 3. Postconditions for basic_regex construction</b></p>
|
||||
<div class="table-contents"><table class="table" summary="Postconditions for basic_regex construction">
|
||||
<colgroup>
|
||||
<col>
|
||||
@ -616,7 +616,7 @@
|
||||
according the option flags specified in <span class="emphasis"><em>f</em></span>.
|
||||
</p>
|
||||
<div class="table">
|
||||
<a name="id813090"></a><p class="title"><b>Table 4. Postconditions for basic_regex construction</b></p>
|
||||
<a name="id703558"></a><p class="title"><b>Table 4. Postconditions for basic_regex construction</b></p>
|
||||
<div class="table-contents"><table class="table" summary="Postconditions for basic_regex construction">
|
||||
<colgroup>
|
||||
<col>
|
||||
@ -727,7 +727,7 @@
|
||||
flags</a> specified in <span class="emphasis"><em>f</em></span>.
|
||||
</p>
|
||||
<div class="table">
|
||||
<a name="id814730"></a><p class="title"><b>Table 5. Postconditions for basic_regex construction</b></p>
|
||||
<a name="id704106"></a><p class="title"><b>Table 5. Postconditions for basic_regex construction</b></p>
|
||||
<div class="table-contents"><table class="table" summary="Postconditions for basic_regex construction">
|
||||
<colgroup>
|
||||
<col>
|
||||
@ -829,7 +829,7 @@
|
||||
flags</a> specified in <span class="emphasis"><em>f</em></span>.
|
||||
</p>
|
||||
<div class="table">
|
||||
<a name="id815089"></a><p class="title"><b>Table 6. Postconditions for basic_regex construction</b></p>
|
||||
<a name="id704465"></a><p class="title"><b>Table 6. Postconditions for basic_regex construction</b></p>
|
||||
<div class="table-contents"><table class="table" summary="Postconditions for basic_regex construction">
|
||||
<colgroup>
|
||||
<col>
|
||||
@ -1043,7 +1043,7 @@
|
||||
in <span class="emphasis"><em>f</em></span>.
|
||||
</p>
|
||||
<div class="table">
|
||||
<a name="id816605"></a><p class="title"><b>Table 7. Postconditions for basic_regex::assign</b></p>
|
||||
<a name="id705981"></a><p class="title"><b>Table 7. Postconditions for basic_regex::assign</b></p>
|
||||
<div class="table-contents"><table class="table" summary="Postconditions for basic_regex::assign">
|
||||
<colgroup>
|
||||
<col>
|
||||
|
@ -34,7 +34,7 @@
|
||||
Boost-specific enhanced interface.
|
||||
</p>
|
||||
<a name="boost_regex.ref.concepts.traits_concept.minimal_requirements_"></a><h5>
|
||||
<a name="id916363"></a>
|
||||
<a name="id806618"></a>
|
||||
<a class="link" href="traits_concept.html#boost_regex.ref.concepts.traits_concept.minimal_requirements_">Minimal
|
||||
requirements.</a>
|
||||
</h5>
|
||||
@ -381,7 +381,7 @@
|
||||
</tbody>
|
||||
</table></div>
|
||||
<a name="boost_regex.ref.concepts.traits_concept.additional_optional_requirements"></a><h5>
|
||||
<a name="id917023"></a>
|
||||
<a name="id807234"></a>
|
||||
<a class="link" href="traits_concept.html#boost_regex.ref.concepts.traits_concept.additional_optional_requirements">Additional
|
||||
Optional Requirements</a>
|
||||
</h5>
|
||||
|
@ -34,7 +34,7 @@
|
||||
previous version of Boost.Regex and will not be further updated:
|
||||
</p>
|
||||
<a name="boost_regex.ref.deprecated_interfaces.regex_format.algorithm_regex_format"></a><h5>
|
||||
<a name="id917545"></a>
|
||||
<a name="id807756"></a>
|
||||
<a class="link" href="regex_format.html#boost_regex.ref.deprecated_interfaces.regex_format.algorithm_regex_format">Algorithm
|
||||
regex_format</a>
|
||||
</h5>
|
||||
|
@ -27,7 +27,7 @@
|
||||
<a name="boost_regex.ref.error_type"></a><a class="link" href="error_type.html" title="error_type"> error_type</a>
|
||||
</h3></div></div></div>
|
||||
<a name="boost_regex.ref.error_type.synopsis"></a><h5>
|
||||
<a name="id896583"></a>
|
||||
<a name="id786382"></a>
|
||||
<a class="link" href="error_type.html#boost_regex.ref.error_type.synopsis">Synopsis</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -57,7 +57,7 @@
|
||||
</span><span class="special">}</span> <span class="comment">// namespace boost
|
||||
</span></pre>
|
||||
<a name="boost_regex.ref.error_type.description"></a><h5>
|
||||
<a name="id896999"></a>
|
||||
<a name="id786797"></a>
|
||||
<a class="link" href="error_type.html#boost_regex.ref.error_type.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
|
@ -69,7 +69,7 @@
|
||||
</span><span class="special">}</span> <span class="comment">// namespace boost
|
||||
</span></pre>
|
||||
<a name="boost_regex.ref.match_flag_type.description"></a><h5>
|
||||
<a name="id895271"></a>
|
||||
<a name="id785831"></a>
|
||||
<a class="link" href="match_flag_type.html#boost_regex.ref.match_flag_type.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
|
@ -27,7 +27,7 @@
|
||||
<a name="boost_regex.ref.match_results"></a><a class="link" href="match_results.html" title="match_results"> match_results</a>
|
||||
</h3></div></div></div>
|
||||
<a name="boost_regex.ref.match_results.synopsis"></a><h5>
|
||||
<a name="id819686"></a>
|
||||
<a name="id710291"></a>
|
||||
<a class="link" href="match_results.html#boost_regex.ref.match_results.synopsis">Synopsis</a>
|
||||
</h5>
|
||||
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
|
||||
@ -167,7 +167,7 @@
|
||||
<span class="identifier">match_results</span><span class="special"><</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">>&</span> <span class="identifier">m2</span><span class="special">);</span>
|
||||
</pre>
|
||||
<a name="boost_regex.ref.match_results.description"></a><h5>
|
||||
<a name="id824304"></a>
|
||||
<a name="id713816"></a>
|
||||
<a class="link" href="match_results.html#boost_regex.ref.match_results.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -406,14 +406,21 @@
|
||||
<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span>
|
||||
<span class="identifier">difference_type</span> <span class="identifier">length</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&)</span><span class="keyword">const</span><span class="special">;</span>
|
||||
</pre>
|
||||
<p>
|
||||
<span class="bold"><strong>Requires</strong></span>: that the match_results object
|
||||
has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from
|
||||
a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>,
|
||||
and that the underlying iterators have not been subsequently invalidated.
|
||||
Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object
|
||||
was not initialized.
|
||||
</p>
|
||||
<p>
|
||||
<span class="bold"><strong>Effects</strong></span>: Returns the length of sub-expression
|
||||
<span class="emphasis"><em>sub</em></span>, that is to say: <code class="computeroutput"><span class="special">(*</span><span class="keyword">this</span><span class="special">)[</span><span class="identifier">sub</span><span class="special">].</span><span class="identifier">length</span><span class="special">()</span></code>.
|
||||
</p>
|
||||
<p>
|
||||
The overloads that accept a string refer to a named sub-expression <span class="emphasis"><em>n</em></span>.
|
||||
In the event that there is no such named sub-expression then returns an empty
|
||||
string.
|
||||
In the event that there is no such named sub-expression then returns zero.
|
||||
</p>
|
||||
<p>
|
||||
The template overloads of this function, allow the string and/or character
|
||||
@ -434,6 +441,14 @@
|
||||
<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span>
|
||||
<span class="identifier">difference_type</span> <span class="identifier">position</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&)</span><span class="keyword">const</span><span class="special">;</span>
|
||||
</pre>
|
||||
<p>
|
||||
<span class="bold"><strong>Requires</strong></span>: that the match_results object
|
||||
has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from
|
||||
a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>,
|
||||
and that the underlying iterators have not been subsequently invalidated.
|
||||
Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object
|
||||
was not initialized.
|
||||
</p>
|
||||
<p>
|
||||
<span class="bold"><strong>Effects</strong></span>: Returns the starting location of
|
||||
sub-expression <span class="emphasis"><em>sub</em></span>, or -1 if <span class="emphasis"><em>sub</em></span>
|
||||
@ -443,8 +458,7 @@
|
||||
</p>
|
||||
<p>
|
||||
The overloads that accept a string refer to a named sub-expression <span class="emphasis"><em>n</em></span>.
|
||||
In the event that there is no such named sub-expression then returns an empty
|
||||
string.
|
||||
In the event that there is no such named sub-expression then returns -1.
|
||||
</p>
|
||||
<p>
|
||||
The template overloads of this function, allow the string and/or character
|
||||
@ -467,6 +481,14 @@
|
||||
<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span>
|
||||
<span class="identifier">string_type</span> <span class="identifier">str</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">sub</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
|
||||
</pre>
|
||||
<p>
|
||||
<span class="bold"><strong>Requires</strong></span>: that the match_results object
|
||||
has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from
|
||||
a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>,
|
||||
and that the underlying iterators have not been subsequently invalidated.
|
||||
Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object
|
||||
was not initialized.
|
||||
</p>
|
||||
<p>
|
||||
<span class="bold"><strong>Effects</strong></span>: Returns sub-expression <span class="emphasis"><em>sub</em></span>
|
||||
as a string: <code class="computeroutput"><span class="identifier">string_type</span><span class="special">((*</span><span class="keyword">this</span><span class="special">)[</span><span class="identifier">sub</span><span class="special">])</span></code>.
|
||||
@ -497,6 +519,14 @@
|
||||
<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span>
|
||||
<span class="identifier">const_reference</span> <span class="keyword">operator</span><span class="special">[](</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">,</span> <span class="identifier">A</span><span class="special">>&</span> <span class="identifier">n</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
|
||||
</pre>
|
||||
<p>
|
||||
<span class="bold"><strong>Requires</strong></span>: that the match_results object
|
||||
has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from
|
||||
a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>,
|
||||
and that the underlying iterators have not been subsequently invalidated.
|
||||
Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object
|
||||
was not initialized.
|
||||
</p>
|
||||
<p>
|
||||
<span class="bold"><strong>Effects</strong></span>: Returns a reference to the <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a>
|
||||
object representing the character sequence that matched marked sub-expression
|
||||
@ -527,6 +557,14 @@
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">const_reference</span> <span class="identifier">prefix</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
|
||||
</pre>
|
||||
<p>
|
||||
<span class="bold"><strong>Requires</strong></span>: that the match_results object
|
||||
has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from
|
||||
a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>,
|
||||
and that the underlying iterators have not been subsequently invalidated.
|
||||
Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object
|
||||
was not initialized.
|
||||
</p>
|
||||
<p>
|
||||
<span class="bold"><strong>Effects</strong></span>: Returns a reference to the <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a>
|
||||
object representing the character sequence from the start of the string being
|
||||
@ -536,6 +574,14 @@
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">const_reference</span> <span class="identifier">suffix</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
|
||||
</pre>
|
||||
<p>
|
||||
<span class="bold"><strong>Requires</strong></span>: that the match_results object
|
||||
has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from
|
||||
a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>,
|
||||
and that the underlying iterators have not been subsequently invalidated.
|
||||
Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object
|
||||
was not initialized.
|
||||
</p>
|
||||
<p>
|
||||
<span class="bold"><strong>Effects</strong></span>: Returns a reference to the <a class="link" href="sub_match.html" title="sub_match"><code class="computeroutput"><span class="identifier">sub_match</span></code></a>
|
||||
object representing the character sequence from the end of the match found
|
||||
@ -579,7 +625,18 @@
|
||||
<span class="identifier">out</span><span class="special">)</span></code>
|
||||
or <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(*</span><span class="keyword">this</span><span class="special">,</span> <span class="identifier">out</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>, both of which write the replacement text
|
||||
to <code class="computeroutput"><span class="special">*</span><span class="identifier">out</span></code>,
|
||||
and then return the new OutputIterator position.
|
||||
and then return the new OutputIterator position. Note that if the formatter
|
||||
is a functor, then it is <span class="emphasis"><em>passed by value</em></span>: users that
|
||||
want to pass function objects with internal state might want to use <a href="../../../../../../doc/html/ref.html" target="_top">Boost.Ref</a> to wrap the object
|
||||
so that it's passed by reference.
|
||||
</p>
|
||||
<p>
|
||||
<span class="bold"><strong>Requires</strong></span>: that the match_results object
|
||||
has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from
|
||||
a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>,
|
||||
and that the underlying iterators have not been subsequently invalidated.
|
||||
Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object
|
||||
was not initialized.
|
||||
</p>
|
||||
<p>
|
||||
<span class="bold"><strong>Effects</strong></span>: If <code class="computeroutput"><span class="identifier">fmt</span></code>
|
||||
@ -601,7 +658,7 @@
|
||||
<div class="itemizedlist"><ul type="disc">
|
||||
<li>
|
||||
Call <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span></code> and
|
||||
copy the result to <code class="computeroutput"><span class="identifier">OutputIterator</span></code><span class="emphasis"><em>out</em></span>.
|
||||
copy the string returned to <code class="computeroutput"><span class="identifier">OutputIterator</span></code><span class="emphasis"><em>out</em></span>.
|
||||
</li>
|
||||
<li>
|
||||
Call <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(*</span><span class="keyword">this</span><span class="special">,</span> <span class="identifier">out</span><span class="special">)</span></code>.
|
||||
@ -640,6 +697,14 @@
|
||||
to <code class="computeroutput"><span class="special">*</span><span class="identifier">out</span></code>,
|
||||
and then return the new OutputIterator position.
|
||||
</p>
|
||||
<p>
|
||||
<span class="bold"><strong>Requires</strong></span>: that the match_results object
|
||||
has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from
|
||||
a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>,
|
||||
and that the underlying iterators have not been subsequently invalidated.
|
||||
Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object
|
||||
was not initialized.
|
||||
</p>
|
||||
<p>
|
||||
<span class="bold"><strong>Effects</strong></span>: If <code class="computeroutput"><span class="identifier">fmt</span></code>
|
||||
is either a null-terminated string, or a container of <code class="computeroutput"><span class="identifier">char_type</span></code>'s,
|
||||
@ -713,6 +778,14 @@
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">const</span> <span class="identifier">capture_sequence_type</span><span class="special">&</span> <span class="identifier">captures</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
|
||||
</pre>
|
||||
<p>
|
||||
<span class="bold"><strong>Requires</strong></span>: that the match_results object
|
||||
has been initialized as a result of a successful call to <a class="link" href="regex_search.html" title="regex_search"><code class="computeroutput"><span class="identifier">regex_search</span></code></a> or <a class="link" href="regex_match.html" title="regex_match"><code class="computeroutput"><span class="identifier">regex_match</span></code></a> or was returned from
|
||||
a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>,
|
||||
and that the underlying iterators have not been subsequently invalidated.
|
||||
Will raise a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span></code> if the match_results object
|
||||
was not initialized.
|
||||
</p>
|
||||
<p>
|
||||
<span class="bold"><strong>Effects</strong></span>: returns a sequence containing all
|
||||
the captures obtained for sub-expression i.
|
||||
|
@ -43,7 +43,7 @@
|
||||
on to the "real" algorithm.
|
||||
</p>
|
||||
<a name="boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_match"></a><h5>
|
||||
<a name="id898779"></a>
|
||||
<a name="id788624"></a>
|
||||
<a class="link" href="unicode_algo.html#boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_match">u32regex_match</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -89,7 +89,7 @@
|
||||
<span class="special">}</span>
|
||||
</pre>
|
||||
<a name="boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_search"></a><h5>
|
||||
<a name="id899294"></a>
|
||||
<a name="id789139"></a>
|
||||
<a class="link" href="unicode_algo.html#boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_search">u32regex_search</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -128,7 +128,7 @@
|
||||
<span class="special">}</span>
|
||||
</pre>
|
||||
<a name="boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_replace"></a><h5>
|
||||
<a name="id899712"></a>
|
||||
<a name="id789558"></a>
|
||||
<a class="link" href="unicode_algo.html#boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_replace">u32regex_replace</a>
|
||||
</h5>
|
||||
<p>
|
||||
|
@ -28,7 +28,7 @@
|
||||
Unicode Aware Regex Iterators</a>
|
||||
</h5></div></div></div>
|
||||
<a name="boost_regex.ref.non_std_strings.icu.unicode_iter.u32regex_iterator"></a><h5>
|
||||
<a name="id900030"></a>
|
||||
<a name="id789876"></a>
|
||||
<a class="link" href="unicode_iter.html#boost_regex.ref.non_std_strings.icu.unicode_iter.u32regex_iterator">u32regex_iterator</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -126,7 +126,7 @@
|
||||
Provided of course that the input is encoded as UTF-8.
|
||||
</p>
|
||||
<a name="boost_regex.ref.non_std_strings.icu.unicode_iter.u32regex_token_iterator"></a><h5>
|
||||
<a name="id902483"></a>
|
||||
<a name="id791452"></a>
|
||||
<a class="link" href="unicode_iter.html#boost_regex.ref.non_std_strings.icu.unicode_iter.u32regex_token_iterator">u32regex_token_iterator</a>
|
||||
</h5>
|
||||
<p>
|
||||
|
@ -34,7 +34,7 @@
|
||||
here they are anyway:
|
||||
</p>
|
||||
<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_match"></a><h5>
|
||||
<a name="id907627"></a>
|
||||
<a name="id797849"></a>
|
||||
<a class="link" href="mfc_algo.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_match">regex_match</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -82,7 +82,7 @@
|
||||
<span class="special">}</span>
|
||||
</pre>
|
||||
<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_match__second_overload_"></a><h5>
|
||||
<a name="id909378"></a>
|
||||
<a name="id798507"></a>
|
||||
<a class="link" href="mfc_algo.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_match__second_overload_">regex_match
|
||||
(second overload)</a>
|
||||
</h5>
|
||||
@ -110,7 +110,7 @@
|
||||
<span class="special">}</span>
|
||||
</pre>
|
||||
<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_search"></a><h5>
|
||||
<a name="id909809"></a>
|
||||
<a name="id798937"></a>
|
||||
<a class="link" href="mfc_algo.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_search">regex_search</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -149,7 +149,7 @@
|
||||
<span class="special">}</span>
|
||||
</pre>
|
||||
<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_search__second_overload_"></a><h5>
|
||||
<a name="id910344"></a>
|
||||
<a name="id799473"></a>
|
||||
<a class="link" href="mfc_algo.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_search__second_overload_">regex_search
|
||||
(second overload)</a>
|
||||
</h5>
|
||||
@ -164,7 +164,7 @@
|
||||
<span class="special">+</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetLength</span><span class="special">(),</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">f</span><span class="special">);</span></code>
|
||||
</p>
|
||||
<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_replace"></a><h5>
|
||||
<a name="id910634"></a>
|
||||
<a name="id800856"></a>
|
||||
<a class="link" href="mfc_algo.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_replace">regex_replace</a>
|
||||
</h5>
|
||||
<p>
|
||||
|
@ -32,7 +32,7 @@
|
||||
an MFC/ATL string to a <a class="link" href="../../regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> or <a class="link" href="../../regex_token_iterator.html" title="regex_token_iterator"><code class="computeroutput"><span class="identifier">regex_token_iterator</span></code></a>:
|
||||
</p>
|
||||
<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_iter.regex_iterator_creation_helper"></a><h5>
|
||||
<a name="id911405"></a>
|
||||
<a name="id801626"></a>
|
||||
<a class="link" href="mfc_iter.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_iter.regex_iterator_creation_helper">regex_iterator
|
||||
creation helper</a>
|
||||
</h5>
|
||||
@ -68,7 +68,7 @@
|
||||
<span class="special">}</span>
|
||||
</pre>
|
||||
<a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_iter.regex_token_iterator_creation_helpers"></a><h5>
|
||||
<a name="id911954"></a>
|
||||
<a name="id802175"></a>
|
||||
<a class="link" href="mfc_iter.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_iter.regex_token_iterator_creation_helpers">regex_token_iterator
|
||||
creation helpers</a>
|
||||
</h5>
|
||||
|
@ -165,7 +165,7 @@
|
||||
<a name="regcomp"></a><p>
|
||||
</p>
|
||||
<a name="boost_regex.ref.posix.regcomp"></a><h5>
|
||||
<a name="id915185"></a>
|
||||
<a name="id804314"></a>
|
||||
<a class="link" href="posix.html#boost_regex.ref.posix.regcomp">regcomp</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -379,7 +379,7 @@
|
||||
<a name="regerror"></a><p>
|
||||
</p>
|
||||
<a name="boost_regex.ref.posix.regerror"></a><h5>
|
||||
<a name="id915690"></a>
|
||||
<a name="id804819"></a>
|
||||
<a class="link" href="posix.html#boost_regex.ref.posix.regerror">regerror</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -467,7 +467,7 @@
|
||||
<a name="regexec"></a><p>
|
||||
</p>
|
||||
<a name="boost_regex.ref.posix.regexec"></a><h5>
|
||||
<a name="id915818"></a>
|
||||
<a name="id804947"></a>
|
||||
<a class="link" href="posix.html#boost_regex.ref.posix.regexec">regexec</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -537,7 +537,7 @@
|
||||
<a name="regfree"></a><p>
|
||||
</p>
|
||||
<a name="boost_regex.ref.posix.regfree"></a><h5>
|
||||
<a name="id915930"></a>
|
||||
<a name="id806185"></a>
|
||||
<a class="link" href="posix.html#boost_regex.ref.posix.regfree">regfree</a>
|
||||
</h5>
|
||||
<p>
|
||||
|
@ -78,7 +78,7 @@
|
||||
<span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span>
|
||||
</pre>
|
||||
<a name="boost_regex.ref.regex_iterator.description"></a><h5>
|
||||
<a name="id872909"></a>
|
||||
<a name="id762755"></a>
|
||||
<a class="link" href="regex_iterator.html#boost_regex.ref.regex_iterator.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -436,7 +436,7 @@
|
||||
<span class="emphasis"><em>m</em></span>.
|
||||
</p>
|
||||
<a name="boost_regex.ref.regex_iterator.examples"></a><h5>
|
||||
<a name="id876580"></a>
|
||||
<a name="id766409"></a>
|
||||
<a class="link" href="regex_iterator.html#boost_regex.ref.regex_iterator.examples">Examples</a>
|
||||
</h5>
|
||||
<p>
|
||||
|
@ -80,7 +80,7 @@
|
||||
<span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span>
|
||||
</pre>
|
||||
<a name="boost_regex.ref.regex_match.description"></a><h5>
|
||||
<a name="id856145"></a>
|
||||
<a name="id747144"></a>
|
||||
<a class="link" href="regex_match.html#boost_regex.ref.regex_match.description">Description</a>
|
||||
</h5>
|
||||
<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span>
|
||||
@ -360,7 +360,7 @@
|
||||
<span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>.
|
||||
</p>
|
||||
<a name="boost_regex.ref.regex_match.examples"></a><h5>
|
||||
<a name="id859608"></a>
|
||||
<a name="id750606"></a>
|
||||
<a class="link" href="regex_match.html#boost_regex.ref.regex_match.examples">Examples</a>
|
||||
</h5>
|
||||
<p>
|
||||
|
@ -53,7 +53,7 @@
|
||||
<span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span>
|
||||
</pre>
|
||||
<a name="boost_regex.ref.regex_replace.description"></a><h5>
|
||||
<a name="id867135"></a>
|
||||
<a name="id757041"></a>
|
||||
<a class="link" href="regex_replace.html#boost_regex.ref.regex_replace.description">Description</a>
|
||||
</h5>
|
||||
<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Formatter</span><span class="special">></span>
|
||||
@ -101,7 +101,10 @@
|
||||
or <code class="computeroutput"><span class="identifier">fmt</span><span class="special">(</span><span class="identifier">what</span><span class="special">,</span> <span class="identifier">out</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>, both of which write the replacement text
|
||||
to <code class="computeroutput"><span class="special">*</span><span class="identifier">out</span></code>,
|
||||
and then return the new OutputIterator position. In each case <code class="computeroutput"><span class="identifier">what</span></code> is the <a class="link" href="match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> object that represents
|
||||
the match found.
|
||||
the match found. Note that if the formatter is a functor, then it is <span class="emphasis"><em>passed
|
||||
by value</em></span>: users that want to pass function objects with internal
|
||||
state might want to use <a href="../../../../../../doc/html/ref.html" target="_top">Boost.Ref</a>
|
||||
to wrap the object so that it's passed by reference.
|
||||
</p>
|
||||
<p>
|
||||
<span class="bold"><strong>Effects</strong></span>: Constructs an <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> object:
|
||||
@ -196,7 +199,7 @@
|
||||
and then returns <code class="computeroutput"><span class="identifier">result</span></code>.
|
||||
</p>
|
||||
<a name="boost_regex.ref.regex_replace.examples"></a><h5>
|
||||
<a name="id868579"></a>
|
||||
<a name="id759580"></a>
|
||||
<a class="link" href="regex_replace.html#boost_regex.ref.regex_replace.examples">Examples</a>
|
||||
</h5>
|
||||
<p>
|
||||
|
@ -73,7 +73,7 @@
|
||||
<span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span>
|
||||
</pre>
|
||||
<a name="boost_regex.ref.regex_search.description"></a><h5>
|
||||
<a name="id861232"></a>
|
||||
<a name="id752230"></a>
|
||||
<a class="link" href="regex_search.html#boost_regex.ref.regex_search.description">Description</a>
|
||||
</h5>
|
||||
<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span>
|
||||
@ -355,7 +355,7 @@
|
||||
<span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">regex_search</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>.
|
||||
</p>
|
||||
<a name="boost_regex.ref.regex_search.examples"></a><h5>
|
||||
<a name="id863665"></a>
|
||||
<a name="id755755"></a>
|
||||
<a class="link" href="regex_search.html#boost_regex.ref.regex_search.examples">Examples</a>
|
||||
</h5>
|
||||
<p>
|
||||
|
@ -136,7 +136,7 @@
|
||||
<span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span>
|
||||
</pre>
|
||||
<a name="boost_regex.ref.regex_token_iterator.description"></a><h5>
|
||||
<a name="id883023"></a>
|
||||
<a name="id772869"></a>
|
||||
<a class="link" href="regex_token_iterator.html#boost_regex.ref.regex_token_iterator.description">Description</a>
|
||||
</h5>
|
||||
<a name="boost_regex.regex_token_iterator.construct1"></a><p>
|
||||
@ -383,7 +383,7 @@
|
||||
<span class="emphasis"><em>m</em></span>.
|
||||
</p>
|
||||
<a name="boost_regex.ref.regex_token_iterator.examples"></a><h5>
|
||||
<a name="id886082"></a>
|
||||
<a name="id775933"></a>
|
||||
<a class="link" href="regex_token_iterator.html#boost_regex.ref.regex_token_iterator.examples">Examples</a>
|
||||
</h5>
|
||||
<p>
|
||||
|
@ -46,7 +46,7 @@
|
||||
<span class="special">}</span> <span class="comment">// namespace boost
|
||||
</span></pre>
|
||||
<a name="boost_regex.ref.regex_traits.description"></a><h5>
|
||||
<a name="id897539"></a>
|
||||
<a name="id787337"></a>
|
||||
<a class="link" href="regex_traits.html#boost_regex.ref.regex_traits.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
|
@ -329,11 +329,11 @@
|
||||
<span class="special">}</span> <span class="comment">// namespace boost
|
||||
</span></pre>
|
||||
<a name="boost_regex.ref.sub_match.description"></a><h5>
|
||||
<a name="id840001"></a>
|
||||
<a name="id731546"></a>
|
||||
<a class="link" href="sub_match.html#boost_regex.ref.sub_match.description">Description</a>
|
||||
</h5>
|
||||
<a name="boost_regex.ref.sub_match.members"></a><h6>
|
||||
<a name="id840014"></a>
|
||||
<a name="id731559"></a>
|
||||
<a class="link" href="sub_match.html#boost_regex.ref.sub_match.members">Members</a>
|
||||
</h6>
|
||||
<a name="boost_regex.sub_match.value_type"></a><p>
|
||||
@ -473,7 +473,7 @@
|
||||
</li>
|
||||
</ul></div>
|
||||
<a name="boost_regex.ref.sub_match.sub_match_non_member_operators"></a><h6>
|
||||
<a name="id841662"></a>
|
||||
<a name="id732659"></a>
|
||||
<a class="link" href="sub_match.html#boost_regex.ref.sub_match.sub_match_non_member_operators">sub_match
|
||||
non-member operators</a>
|
||||
</h6>
|
||||
@ -1008,7 +1008,7 @@
|
||||
<span class="special">+</span> <span class="identifier">m2</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>.
|
||||
</p>
|
||||
<a name="boost_regex.ref.sub_match.stream_inserter"></a><h6>
|
||||
<a name="id854747"></a>
|
||||
<a name="id745745"></a>
|
||||
<a class="link" href="sub_match.html#boost_regex.ref.sub_match.stream_inserter">Stream inserter</a>
|
||||
</h6>
|
||||
<a name="boost_regex.sub_match.op_stream"></a><p>
|
||||
|
@ -28,7 +28,7 @@
|
||||
Expression Syntax</a>
|
||||
</h3></div></div></div>
|
||||
<a name="boost_regex.syntax.basic_extended.synopsis"></a><h4>
|
||||
<a name="id792276"></a>
|
||||
<a name="id681924"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.synopsis">Synopsis</a>
|
||||
</h4>
|
||||
<p>
|
||||
@ -46,7 +46,7 @@
|
||||
<a name="boost_regex.posix_extended_syntax"></a><p>
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.posix_extended_syntax"></a><h4>
|
||||
<a name="id792454"></a>
|
||||
<a name="id682102"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.posix_extended_syntax">POSIX
|
||||
Extended Syntax</a>
|
||||
</h4>
|
||||
@ -56,7 +56,7 @@
|
||||
</p>
|
||||
<pre class="programlisting">.[{()\*+?|^$</pre>
|
||||
<a name="boost_regex.syntax.basic_extended.wildcard_"></a><h5>
|
||||
<a name="id792476"></a>
|
||||
<a name="id682124"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.wildcard_">Wildcard:</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -74,7 +74,7 @@
|
||||
</li>
|
||||
</ul></div>
|
||||
<a name="boost_regex.syntax.basic_extended.anchors_"></a><h5>
|
||||
<a name="id792520"></a>
|
||||
<a name="id682168"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.anchors_">Anchors:</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -86,7 +86,7 @@
|
||||
of an expression, or the last character of a sub-expression.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.marked_sub_expressions_"></a><h5>
|
||||
<a name="id792543"></a>
|
||||
<a name="id682191"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.marked_sub_expressions_">Marked
|
||||
sub-expressions:</a>
|
||||
</h5>
|
||||
@ -98,7 +98,7 @@
|
||||
to by a back-reference.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.repeats_"></a><h5>
|
||||
<a name="id792577"></a>
|
||||
<a name="id682225"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.repeats_">Repeats:</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -184,7 +184,7 @@ cab
|
||||
operator to be applied to.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.back_references_"></a><h5>
|
||||
<a name="id792883"></a>
|
||||
<a name="id682531"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.back_references_">Back references:</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -214,7 +214,7 @@ cab
|
||||
</p></td></tr>
|
||||
</table></div>
|
||||
<a name="boost_regex.syntax.basic_extended.alternation"></a><h5>
|
||||
<a name="id792946"></a>
|
||||
<a name="id682594"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.alternation">Alternation</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -227,7 +227,7 @@ cab
|
||||
will match either of "abd" or "abef".
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.character_sets_"></a><h5>
|
||||
<a name="id793014"></a>
|
||||
<a name="id682662"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.character_sets_">Character
|
||||
sets:</a>
|
||||
</h5>
|
||||
@ -240,7 +240,7 @@ cab
|
||||
A bracket expression may contain any combination of the following:
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.single_characters_"></a><h6>
|
||||
<a name="id793034"></a>
|
||||
<a name="id682682"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.single_characters_">Single
|
||||
characters:</a>
|
||||
</h6>
|
||||
@ -249,7 +249,7 @@ cab
|
||||
or 'c'.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.character_ranges_"></a><h6>
|
||||
<a name="id793065"></a>
|
||||
<a name="id682713"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.character_ranges_">Character
|
||||
ranges:</a>
|
||||
</h6>
|
||||
@ -265,7 +265,7 @@ cab
|
||||
the code points of the characters only.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.negation_"></a><h6>
|
||||
<a name="id793126"></a>
|
||||
<a name="id682774"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.negation_">Negation:</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -274,7 +274,7 @@ cab
|
||||
range <code class="computeroutput"><span class="identifier">a</span><span class="special">-</span><span class="identifier">c</span></code>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.character_classes_"></a><h6>
|
||||
<a name="id793180"></a>
|
||||
<a name="id682828"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.character_classes_">Character
|
||||
classes:</a>
|
||||
</h6>
|
||||
@ -284,7 +284,7 @@ cab
|
||||
<a class="link" href="character_classes.html" title="Character Class Names">character class names</a>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.collating_elements_"></a><h6>
|
||||
<a name="id793232"></a>
|
||||
<a name="id682880"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.collating_elements_">Collating
|
||||
Elements:</a>
|
||||
</h6>
|
||||
@ -312,7 +312,7 @@ cab
|
||||
matches a NUL character.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.equivalence_classes_"></a><h6>
|
||||
<a name="id793334"></a>
|
||||
<a name="id682982"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.equivalence_classes_">Equivalence
|
||||
classes:</a>
|
||||
</h6>
|
||||
@ -329,7 +329,7 @@ cab
|
||||
or even all locales on one platform.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.combinations_"></a><h6>
|
||||
<a name="id793392"></a>
|
||||
<a name="id683040"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.combinations_">Combinations:</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -337,7 +337,7 @@ cab
|
||||
<code class="computeroutput"><span class="special">[[:</span><span class="identifier">digit</span><span class="special">:]</span><span class="identifier">a</span><span class="special">-</span><span class="identifier">c</span><span class="special">[.</span><span class="identifier">NUL</span><span class="special">.]]</span></code>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.escapes"></a><h5>
|
||||
<a name="id793444"></a>
|
||||
<a name="id683092"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.escapes">Escapes</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -363,7 +363,7 @@ cab
|
||||
extensions are also supported by Boost.Regex:
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.escapes_matching_a_specific_character"></a><h6>
|
||||
<a name="id793488"></a>
|
||||
<a name="id683362"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.escapes_matching_a_specific_character">Escapes
|
||||
matching a specific character</a>
|
||||
</h6>
|
||||
@ -552,7 +552,7 @@ cab
|
||||
</tbody>
|
||||
</table></div>
|
||||
<a name="boost_regex.syntax.basic_extended._quot_single_character_quot__character_classes_"></a><h6>
|
||||
<a name="id794132"></a>
|
||||
<a name="id683652"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended._quot_single_character_quot__character_classes_">"Single
|
||||
character" character classes:</a>
|
||||
</h6>
|
||||
@ -706,7 +706,7 @@ cab
|
||||
</tbody>
|
||||
</table></div>
|
||||
<a name="boost_regex.syntax.basic_extended.character_properties"></a><h6>
|
||||
<a name="id794620"></a>
|
||||
<a name="id684141"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.character_properties">Character
|
||||
Properties</a>
|
||||
</h6>
|
||||
@ -813,7 +813,7 @@ cab
|
||||
matches any "digit" character, as does <code class="computeroutput"><span class="special">\</span><span class="identifier">p</span><span class="special">{</span><span class="identifier">digit</span><span class="special">}</span></code>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.word_boundaries"></a><h6>
|
||||
<a name="id794927"></a>
|
||||
<a name="id684448"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.word_boundaries">Word Boundaries</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -888,7 +888,7 @@ cab
|
||||
</tbody>
|
||||
</table></div>
|
||||
<a name="boost_regex.syntax.basic_extended.buffer_boundaries"></a><h6>
|
||||
<a name="id795083"></a>
|
||||
<a name="id684604"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.buffer_boundaries">Buffer
|
||||
boundaries</a>
|
||||
</h6>
|
||||
@ -979,7 +979,7 @@ cab
|
||||
</tbody>
|
||||
</table></div>
|
||||
<a name="boost_regex.syntax.basic_extended.continuation_escape"></a><h6>
|
||||
<a name="id795268"></a>
|
||||
<a name="id684789"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.continuation_escape">Continuation
|
||||
Escape</a>
|
||||
</h6>
|
||||
@ -991,7 +991,7 @@ cab
|
||||
match to start where the last one ended.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.quoting_escape"></a><h6>
|
||||
<a name="id795296"></a>
|
||||
<a name="id684816"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.quoting_escape">Quoting
|
||||
escape</a>
|
||||
</h6>
|
||||
@ -1005,7 +1005,7 @@ cab
|
||||
<span class="special">\*+</span><span class="identifier">aaa</span>
|
||||
</pre>
|
||||
<a name="boost_regex.syntax.basic_extended.unicode_escapes"></a><h6>
|
||||
<a name="id795376"></a>
|
||||
<a name="id684897"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.unicode_escapes">Unicode
|
||||
escapes</a>
|
||||
</h6>
|
||||
@ -1056,7 +1056,7 @@ cab
|
||||
</tbody>
|
||||
</table></div>
|
||||
<a name="boost_regex.syntax.basic_extended.any_other_escape"></a><h6>
|
||||
<a name="id795478"></a>
|
||||
<a name="id684999"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.any_other_escape">Any other
|
||||
escape</a>
|
||||
</h6>
|
||||
@ -1065,7 +1065,7 @@ cab
|
||||
\@ matches a literal '@'.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.operator_precedence"></a><h5>
|
||||
<a name="id795495"></a>
|
||||
<a name="id685015"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.operator_precedence">Operator
|
||||
precedence</a>
|
||||
</h5>
|
||||
@ -1101,7 +1101,7 @@ cab
|
||||
</li>
|
||||
</ol></div>
|
||||
<a name="boost_regex.syntax.basic_extended.what_gets_matched"></a><h5>
|
||||
<a name="id795628"></a>
|
||||
<a name="id685149"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.what_gets_matched">What
|
||||
Gets Matched</a>
|
||||
</h5>
|
||||
@ -1111,11 +1111,11 @@ cab
|
||||
rule</a>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.variations"></a><h4>
|
||||
<a name="id795650"></a>
|
||||
<a name="id685170"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.variations">Variations</a>
|
||||
</h4>
|
||||
<a name="boost_regex.syntax.basic_extended.egrep"></a><h5>
|
||||
<a name="id795663"></a>
|
||||
<a name="id685183"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.egrep">Egrep</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -1136,7 +1136,7 @@ cab
|
||||
used with the -E option.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.awk"></a><h5>
|
||||
<a name="id795765"></a>
|
||||
<a name="id685285"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.awk">awk</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -1150,7 +1150,7 @@ cab
|
||||
these by default anyway.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.options"></a><h4>
|
||||
<a name="id795790"></a>
|
||||
<a name="id685311"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.options">Options</a>
|
||||
</h4>
|
||||
<p>
|
||||
@ -1163,7 +1163,7 @@ cab
|
||||
modify how the case and locale sensitivity are to be applied.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_extended.references"></a><h4>
|
||||
<a name="id795868"></a>
|
||||
<a name="id685389"></a>
|
||||
<a class="link" href="basic_extended.html#boost_regex.syntax.basic_extended.references">References</a>
|
||||
</h4>
|
||||
<p>
|
||||
|
@ -28,7 +28,7 @@
|
||||
Expression Syntax</a>
|
||||
</h3></div></div></div>
|
||||
<a name="boost_regex.syntax.basic_syntax.synopsis"></a><h4>
|
||||
<a name="id795917"></a>
|
||||
<a name="id685438"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.synopsis">Synopsis</a>
|
||||
</h4>
|
||||
<p>
|
||||
@ -45,7 +45,7 @@
|
||||
<a name="boost_regex.posix_basic"></a><p>
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.posix_basic_syntax"></a><h4>
|
||||
<a name="id797977"></a>
|
||||
<a name="id686183"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.posix_basic_syntax">POSIX
|
||||
Basic Syntax</a>
|
||||
</h4>
|
||||
@ -55,7 +55,7 @@
|
||||
</p>
|
||||
<pre class="programlisting">.[\*^$</pre>
|
||||
<a name="boost_regex.syntax.basic_syntax.wildcard_"></a><h5>
|
||||
<a name="id797998"></a>
|
||||
<a name="id686205"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.wildcard_">Wildcard:</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -73,7 +73,7 @@
|
||||
</li>
|
||||
</ul></div>
|
||||
<a name="boost_regex.syntax.basic_syntax.anchors_"></a><h5>
|
||||
<a name="id798043"></a>
|
||||
<a name="id686249"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.anchors_">Anchors:</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -85,7 +85,7 @@
|
||||
of an expression, or the last character of a sub-expression.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.marked_sub_expressions_"></a><h5>
|
||||
<a name="id798063"></a>
|
||||
<a name="id686270"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.marked_sub_expressions_">Marked
|
||||
sub-expressions:</a>
|
||||
</h5>
|
||||
@ -97,7 +97,7 @@
|
||||
by a back-reference.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.repeats_"></a><h5>
|
||||
<a name="id798094"></a>
|
||||
<a name="id686301"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.repeats_">Repeats:</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -155,7 +155,7 @@ aaaa
|
||||
to.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.back_references_"></a><h5>
|
||||
<a name="id798259"></a>
|
||||
<a name="id686465"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.back_references_">Back references:</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -173,7 +173,7 @@ aaaa
|
||||
</p>
|
||||
<pre class="programlisting">aaabba</pre>
|
||||
<a name="boost_regex.syntax.basic_syntax.character_sets_"></a><h5>
|
||||
<a name="id798308"></a>
|
||||
<a name="id686515"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.character_sets_">Character
|
||||
sets:</a>
|
||||
</h5>
|
||||
@ -186,7 +186,7 @@ aaaa
|
||||
A bracket expression may contain any combination of the following:
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.single_characters_"></a><h6>
|
||||
<a name="id798328"></a>
|
||||
<a name="id686535"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.single_characters_">Single
|
||||
characters:</a>
|
||||
</h6>
|
||||
@ -195,7 +195,7 @@ aaaa
|
||||
or 'c'.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.character_ranges_"></a><h6>
|
||||
<a name="id798360"></a>
|
||||
<a name="id686566"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.character_ranges_">Character
|
||||
ranges:</a>
|
||||
</h6>
|
||||
@ -211,7 +211,7 @@ aaaa
|
||||
of the characters only.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.negation_"></a><h6>
|
||||
<a name="id798416"></a>
|
||||
<a name="id686623"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.negation_">Negation:</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -220,7 +220,7 @@ aaaa
|
||||
range a-c.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.character_classes_"></a><h6>
|
||||
<a name="id798454"></a>
|
||||
<a name="id686661"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.character_classes_">Character
|
||||
classes:</a>
|
||||
</h6>
|
||||
@ -230,7 +230,7 @@ aaaa
|
||||
<a class="link" href="character_classes.html" title="Character Class Names">character class names</a>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.collating_elements_"></a><h6>
|
||||
<a name="id798506"></a>
|
||||
<a name="id686713"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.collating_elements_">Collating
|
||||
Elements:</a>
|
||||
</h6>
|
||||
@ -259,7 +259,7 @@ aaaa
|
||||
element names</a>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.equivalence_classes_"></a><h6>
|
||||
<a name="id798597"></a>
|
||||
<a name="id686804"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.equivalence_classes_">Equivalence
|
||||
classes:</a>
|
||||
</h6>
|
||||
@ -276,7 +276,7 @@ aaaa
|
||||
or even all locales on one platform.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.combinations_"></a><h6>
|
||||
<a name="id798655"></a>
|
||||
<a name="id686861"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.combinations_">Combinations:</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -284,7 +284,7 @@ aaaa
|
||||
<code class="computeroutput"><span class="special">[[:</span><span class="identifier">digit</span><span class="special">:]</span><span class="identifier">a</span><span class="special">-</span><span class="identifier">c</span><span class="special">[.</span><span class="identifier">NUL</span><span class="special">.]].</span></code>
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.escapes"></a><h5>
|
||||
<a name="id798708"></a>
|
||||
<a name="id686914"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.escapes">Escapes</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -299,7 +299,7 @@ aaaa
|
||||
will match either a literal '\' or a '^'.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.what_gets_matched"></a><h4>
|
||||
<a name="id798741"></a>
|
||||
<a name="id686948"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.what_gets_matched">What Gets
|
||||
Matched</a>
|
||||
</h4>
|
||||
@ -309,13 +309,13 @@ aaaa
|
||||
rule</a>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.variations"></a><h4>
|
||||
<a name="id798763"></a>
|
||||
<a name="id686969"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.variations">Variations</a>
|
||||
</h4>
|
||||
<a name="boost_regex.grep_syntax"></a><p>
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.grep"></a><h5>
|
||||
<a name="id798783"></a>
|
||||
<a name="id686990"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.grep">Grep</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -333,7 +333,7 @@ aaaa
|
||||
As its name suggests, this behavior is consistent with the Unix utility grep.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.emacs"></a><h5>
|
||||
<a name="id798878"></a>
|
||||
<a name="id687085"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.emacs">emacs</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -613,7 +613,7 @@ aaaa
|
||||
leftmost-longest rule</a>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.options"></a><h4>
|
||||
<a name="id799296"></a>
|
||||
<a name="id687502"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.options">Options</a>
|
||||
</h4>
|
||||
<p>
|
||||
@ -627,7 +627,7 @@ aaaa
|
||||
options</a> modify how the case and locale sensitivity are to be applied.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.basic_syntax.references"></a><h4>
|
||||
<a name="id799402"></a>
|
||||
<a name="id687609"></a>
|
||||
<a class="link" href="basic_syntax.html#boost_regex.syntax.basic_syntax.references">References</a>
|
||||
</h4>
|
||||
<p>
|
||||
|
@ -28,7 +28,7 @@
|
||||
Syntax</a>
|
||||
</h3></div></div></div>
|
||||
<a name="boost_regex.syntax.perl_syntax.synopsis"></a><h4>
|
||||
<a name="id786403"></a>
|
||||
<a name="id675915"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.synopsis">Synopsis</a>
|
||||
</h4>
|
||||
<p>
|
||||
@ -43,7 +43,7 @@
|
||||
</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e2</span><span class="special">(</span><span class="identifier">my_expression</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span><span class="special">::</span><span class="identifier">perl</span><span class="special">|</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span><span class="special">::</span><span class="identifier">icase</span><span class="special">);</span>
|
||||
</pre>
|
||||
<a name="boost_regex.syntax.perl_syntax.perl_regular_expression_syntax"></a><h4>
|
||||
<a name="id786551"></a>
|
||||
<a name="id676062"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.perl_regular_expression_syntax">Perl
|
||||
Regular Expression Syntax</a>
|
||||
</h4>
|
||||
@ -53,7 +53,7 @@
|
||||
</p>
|
||||
<pre class="programlisting">.[{()\*+?|^$</pre>
|
||||
<a name="boost_regex.syntax.perl_syntax.wildcard"></a><h5>
|
||||
<a name="id786575"></a>
|
||||
<a name="id676086"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.wildcard">Wildcard</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -73,7 +73,7 @@
|
||||
</li>
|
||||
</ul></div>
|
||||
<a name="boost_regex.syntax.perl_syntax.anchors"></a><h5>
|
||||
<a name="id786621"></a>
|
||||
<a name="id676133"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.anchors">Anchors</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -83,7 +83,7 @@
|
||||
A '$' character shall match the end of a line.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.marked_sub_expressions"></a><h5>
|
||||
<a name="id786643"></a>
|
||||
<a name="id676155"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.marked_sub_expressions">Marked
|
||||
sub-expressions</a>
|
||||
</h5>
|
||||
@ -94,7 +94,7 @@
|
||||
can also repeated, or referred to by a back-reference.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.non_marking_grouping"></a><h5>
|
||||
<a name="id786669"></a>
|
||||
<a name="id676181"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.non_marking_grouping">Non-marking
|
||||
grouping</a>
|
||||
</h5>
|
||||
@ -107,7 +107,7 @@
|
||||
without splitting out any separate sub-expressions.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.repeats"></a><h5>
|
||||
<a name="id786705"></a>
|
||||
<a name="id676217"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.repeats">Repeats</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -188,7 +188,7 @@
|
||||
to be applied to.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.non_greedy_repeats"></a><h5>
|
||||
<a name="id786942"></a>
|
||||
<a name="id676453"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.non_greedy_repeats">Non greedy
|
||||
repeats</a>
|
||||
</h5>
|
||||
@ -218,16 +218,16 @@
|
||||
while consuming as little input as possible.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.pocessive_repeats"></a><h5>
|
||||
<a name="id787001"></a>
|
||||
<a name="id676512"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.pocessive_repeats">Pocessive
|
||||
repeats</a>
|
||||
</h5>
|
||||
<p>
|
||||
By default when a repeated patten does not match then the engine will backtrack
|
||||
By default when a repeated pattern does not match then the engine will backtrack
|
||||
until a match is found. However, this behaviour can sometime be undesireable
|
||||
so there are also "pocessive" repeats: these match as much as possible
|
||||
and do not then allow backtracking if the rest of the expression fails to
|
||||
match.
|
||||
so there are also "possessive" repeats: these match as much as
|
||||
possible and do not then allow backtracking if the rest of the expression
|
||||
fails to match.
|
||||
</p>
|
||||
<p>
|
||||
<code class="literal">*+</code> Matches the previous atom zero or more times, while
|
||||
@ -250,7 +250,7 @@
|
||||
while giving nothing back.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.back_references"></a><h5>
|
||||
<a name="id787059"></a>
|
||||
<a name="id676571"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.back_references">Back references</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -360,7 +360,7 @@
|
||||
named "two".
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.alternation"></a><h5>
|
||||
<a name="id787279"></a>
|
||||
<a name="id676791"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.alternation">Alternation</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -387,7 +387,7 @@
|
||||
<code class="literal">(?:abc)??</code> has exactly the same effect.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.character_sets"></a><h5>
|
||||
<a name="id787347"></a>
|
||||
<a name="id677140"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.character_sets">Character sets</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -399,7 +399,7 @@
|
||||
A bracket expression may contain any combination of the following:
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.single_characters"></a><h6>
|
||||
<a name="id788761"></a>
|
||||
<a name="id677171"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.single_characters">Single characters</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -407,7 +407,7 @@
|
||||
'b', or 'c'.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.character_ranges"></a><h6>
|
||||
<a name="id788783"></a>
|
||||
<a name="id677192"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.character_ranges">Character
|
||||
ranges</a>
|
||||
</h6>
|
||||
@ -421,7 +421,7 @@
|
||||
sensitive.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.negation"></a><h6>
|
||||
<a name="id788815"></a>
|
||||
<a name="id677225"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.negation">Negation</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -430,7 +430,7 @@
|
||||
matches any character that is not in the range <code class="literal">a-c</code>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.character_classes"></a><h6>
|
||||
<a name="id788843"></a>
|
||||
<a name="id677252"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.character_classes">Character
|
||||
classes</a>
|
||||
</h6>
|
||||
@ -441,7 +441,7 @@
|
||||
class names</a>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.collating_elements"></a><h6>
|
||||
<a name="id788875"></a>
|
||||
<a name="id677285"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.collating_elements">Collating
|
||||
Elements</a>
|
||||
</h6>
|
||||
@ -463,7 +463,7 @@
|
||||
matches a <code class="literal">\0</code> character.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.equivalence_classes"></a><h6>
|
||||
<a name="id788938"></a>
|
||||
<a name="id677347"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.equivalence_classes">Equivalence
|
||||
classes</a>
|
||||
</h6>
|
||||
@ -480,7 +480,7 @@
|
||||
or even all locales on one platform.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.escaped_characters"></a><h6>
|
||||
<a name="id788986"></a>
|
||||
<a name="id677395"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.escaped_characters">Escaped
|
||||
Characters</a>
|
||||
</h6>
|
||||
@ -492,7 +492,7 @@
|
||||
is <span class="emphasis"><em>not</em></span> a "word" character.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.combinations"></a><h6>
|
||||
<a name="id789054"></a>
|
||||
<a name="id677464"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.combinations">Combinations</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -500,7 +500,7 @@
|
||||
<code class="literal">[[:digit:]a-c[.NUL.]]</code>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.escapes"></a><h5>
|
||||
<a name="id789076"></a>
|
||||
<a name="id677485"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.escapes">Escapes</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -692,7 +692,7 @@
|
||||
</tbody>
|
||||
</table></div>
|
||||
<a name="boost_regex.syntax.perl_syntax._quot_single_character_quot__character_classes_"></a><h6>
|
||||
<a name="id789463"></a>
|
||||
<a name="id677873"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax._quot_single_character_quot__character_classes_">"Single
|
||||
character" character classes:</a>
|
||||
</h6>
|
||||
@ -894,7 +894,7 @@
|
||||
</tbody>
|
||||
</table></div>
|
||||
<a name="boost_regex.syntax.perl_syntax.character_properties"></a><h6>
|
||||
<a name="id790063"></a>
|
||||
<a name="id678473"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.character_properties">Character
|
||||
Properties</a>
|
||||
</h6>
|
||||
@ -1002,7 +1002,7 @@
|
||||
as does <code class="literal">\p{digit}</code>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.word_boundaries"></a><h6>
|
||||
<a name="id790352"></a>
|
||||
<a name="id678762"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.word_boundaries">Word Boundaries</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -1021,7 +1021,7 @@
|
||||
<code class="literal">\B</code> Matches only when not at a word boundary.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.buffer_boundaries"></a><h6>
|
||||
<a name="id790404"></a>
|
||||
<a name="id678814"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.buffer_boundaries">Buffer boundaries</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -1036,17 +1036,19 @@
|
||||
\' Matches at the end of a buffer only.
|
||||
</p>
|
||||
<p>
|
||||
\A Matches at the start of a buffer only (the same as \`).
|
||||
\A Matches at the start of a buffer only (the same as <code class="literal">\\\`</code>).
|
||||
</p>
|
||||
<p>
|
||||
\z Matches at the end of a buffer only (the same as \').
|
||||
\z Matches at the end of a buffer only (the same as <code class="literal">\\'</code>).
|
||||
</p>
|
||||
<p>
|
||||
\Z Matches an optional sequence of newlines at the end of a buffer: equivalent
|
||||
to the regular expression <code class="literal">\n*\z</code>
|
||||
\Z Matches a zero-width assertion consisting of an optional sequence of newlines
|
||||
at the end of a buffer: equivalent to the regular expression <code class="literal">(?=\v*\z)</code>.
|
||||
Note that this is subtly different from Perl which behaves as if matching
|
||||
<code class="literal">(?=\n?\z)</code>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.continuation_escape"></a><h6>
|
||||
<a name="id790445"></a>
|
||||
<a name="id678871"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.continuation_escape">Continuation
|
||||
Escape</a>
|
||||
</h6>
|
||||
@ -1058,7 +1060,7 @@
|
||||
one ended.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.quoting_escape"></a><h6>
|
||||
<a name="id790466"></a>
|
||||
<a name="id678893"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.quoting_escape">Quoting escape</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -1071,7 +1073,7 @@
|
||||
<span class="special">\*+</span><span class="identifier">aaa</span>
|
||||
</pre>
|
||||
<a name="boost_regex.syntax.perl_syntax.unicode_escapes"></a><h6>
|
||||
<a name="id790513"></a>
|
||||
<a name="id678940"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.unicode_escapes">Unicode escapes</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -1081,7 +1083,7 @@
|
||||
followed by a sequence of zero or more combining characters.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.matching_line_endings"></a><h6>
|
||||
<a name="id790540"></a>
|
||||
<a name="id678966"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.matching_line_endings">Matching
|
||||
Line Endings</a>
|
||||
</h6>
|
||||
@ -1090,7 +1092,7 @@
|
||||
sequence, specifically it is identical to the expression <code class="literal">(?>\x0D\x0A?|[\x0A-\x0C\x85\x{2028}\x{2029}])</code>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.keeping_back_some_text"></a><h6>
|
||||
<a name="id790566"></a>
|
||||
<a name="id678992"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.keeping_back_some_text">Keeping
|
||||
back some text</a>
|
||||
</h6>
|
||||
@ -1105,7 +1107,7 @@
|
||||
This can be used to simulate variable width lookbehind assertions.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.any_other_escape"></a><h6>
|
||||
<a name="id790596"></a>
|
||||
<a name="id679022"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.any_other_escape">Any other
|
||||
escape</a>
|
||||
</h6>
|
||||
@ -1114,7 +1116,7 @@
|
||||
\@ matches a literal '@'.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.perl_extended_patterns"></a><h5>
|
||||
<a name="id790613"></a>
|
||||
<a name="id679039"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.perl_extended_patterns">Perl
|
||||
Extended Patterns</a>
|
||||
</h5>
|
||||
@ -1123,7 +1125,7 @@
|
||||
<code class="literal">(?</code>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.named_subexpressions"></a><h6>
|
||||
<a name="id790634"></a>
|
||||
<a name="id679061"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.named_subexpressions">Named
|
||||
Subexpressions</a>
|
||||
</h6>
|
||||
@ -1145,14 +1147,14 @@
|
||||
format string for search and replace operations, or in the <a class="link" href="../ref/match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> member functions.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.comments"></a><h6>
|
||||
<a name="id790729"></a>
|
||||
<a name="id679156"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.comments">Comments</a>
|
||||
</h6>
|
||||
<p>
|
||||
<code class="literal">(?# ... )</code> is treated as a comment, it's contents are ignored.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.modifiers"></a><h6>
|
||||
<a name="id790752"></a>
|
||||
<a name="id679178"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.modifiers">Modifiers</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -1166,7 +1168,7 @@
|
||||
pattern only.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.non_marking_groups"></a><h6>
|
||||
<a name="id790787"></a>
|
||||
<a name="id679213"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.non_marking_groups">Non-marking
|
||||
groups</a>
|
||||
</h6>
|
||||
@ -1175,7 +1177,7 @@
|
||||
an additional sub-expression.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.branch_reset"></a><h6>
|
||||
<a name="id790808"></a>
|
||||
<a name="id679235"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.branch_reset">Branch reset</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -1197,7 +1199,7 @@
|
||||
# 1 2 2 3 2 3 4
|
||||
</pre>
|
||||
<a name="boost_regex.syntax.perl_syntax.lookahead"></a><h6>
|
||||
<a name="id790846"></a>
|
||||
<a name="id679272"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.lookahead">Lookahead</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -1220,7 +1222,7 @@
|
||||
could be used to validate the password.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.lookbehind"></a><h6>
|
||||
<a name="id791346"></a>
|
||||
<a name="id680994"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.lookbehind">Lookbehind</a>
|
||||
</h6>
|
||||
<p>
|
||||
@ -1234,7 +1236,7 @@
|
||||
(pattern must be of fixed length).
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.independent_sub_expressions"></a><h6>
|
||||
<a name="id791378"></a>
|
||||
<a name="id681026"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.independent_sub_expressions">Independent
|
||||
sub-expressions</a>
|
||||
</h6>
|
||||
@ -1247,7 +1249,7 @@
|
||||
no match is found at all.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.recursive_expressions"></a><h6>
|
||||
<a name="id791409"></a>
|
||||
<a name="id681057"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.recursive_expressions">Recursive
|
||||
Expressions</a>
|
||||
</h6>
|
||||
@ -1271,7 +1273,7 @@
|
||||
to the next sub-expression to be declared.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.conditional_expressions"></a><h6>
|
||||
<a name="id791506"></a>
|
||||
<a name="id681154"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.conditional_expressions">Conditional
|
||||
Expressions</a>
|
||||
</h6>
|
||||
@ -1319,7 +1321,7 @@
|
||||
</li>
|
||||
</ul></div>
|
||||
<a name="boost_regex.syntax.perl_syntax.operator_precedence"></a><h5>
|
||||
<a name="id791648"></a>
|
||||
<a name="id681296"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.operator_precedence">Operator
|
||||
precedence</a>
|
||||
</h5>
|
||||
@ -1354,7 +1356,7 @@
|
||||
</li>
|
||||
</ol></div>
|
||||
<a name="boost_regex.syntax.perl_syntax.what_gets_matched"></a><h4>
|
||||
<a name="id791738"></a>
|
||||
<a name="id681386"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.what_gets_matched">What gets
|
||||
matched</a>
|
||||
</h4>
|
||||
@ -1529,7 +1531,7 @@
|
||||
</tbody>
|
||||
</table></div>
|
||||
<a name="boost_regex.syntax.perl_syntax.variations"></a><h4>
|
||||
<a name="id792096"></a>
|
||||
<a name="id681744"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.variations">Variations</a>
|
||||
</h4>
|
||||
<p>
|
||||
@ -1538,7 +1540,7 @@
|
||||
and <code class="literal">JScript</code></a> are all synonyms for <code class="literal">perl</code>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.options"></a><h4>
|
||||
<a name="id792142"></a>
|
||||
<a name="id681790"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.options">Options</a>
|
||||
</h4>
|
||||
<p>
|
||||
@ -1550,7 +1552,7 @@
|
||||
are to be applied.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.pattern_modifiers"></a><h4>
|
||||
<a name="id792190"></a>
|
||||
<a name="id681838"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.pattern_modifiers">Pattern
|
||||
Modifiers</a>
|
||||
</h4>
|
||||
@ -1562,7 +1564,7 @@
|
||||
and <code class="literal">no_mod_s</code></a>.
|
||||
</p>
|
||||
<a name="boost_regex.syntax.perl_syntax.references"></a><h4>
|
||||
<a name="id792243"></a>
|
||||
<a name="id681891"></a>
|
||||
<a class="link" href="perl_syntax.html#boost_regex.syntax.perl_syntax.references">References</a>
|
||||
</h4>
|
||||
<p>
|
||||
|
@ -30,7 +30,7 @@
|
||||
There are two ways to use Boost.Regex with Unicode strings:
|
||||
</p>
|
||||
<a name="boost_regex.unicode.rely_on_wchar_t"></a><h5>
|
||||
<a name="id781905"></a>
|
||||
<a name="id670360"></a>
|
||||
<a class="link" href="unicode.html#boost_regex.unicode.rely_on_wchar_t">Rely on wchar_t</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -56,7 +56,7 @@
|
||||
</li>
|
||||
</ul></div>
|
||||
<a name="boost_regex.unicode.use_a_unicode_aware_regular_expression_type_"></a><h5>
|
||||
<a name="id782023"></a>
|
||||
<a name="id672158"></a>
|
||||
<a class="link" href="unicode.html#boost_regex.unicode.use_a_unicode_aware_regular_expression_type_">Use
|
||||
a Unicode Aware Regular Expression Type.</a>
|
||||
</h5>
|
||||
|
@ -28,7 +28,7 @@
|
||||
</h3></div></div></div>
|
||||
<div><p class="copyright">Copyright © 1998 -2007 John Maddock</p></div>
|
||||
<div><div class="legalnotice">
|
||||
<a name="id771610"></a><p>
|
||||
<a name="id660044"></a><p>
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
|
||||
</p>
|
||||
@ -196,7 +196,7 @@
|
||||
</p>
|
||||
</div>
|
||||
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
|
||||
<td align="left"><p><small>Last revised: December 28, 2009 at 12:23:25 GMT</small></p></td>
|
||||
<td align="left"><p><small>Last revised: May 15, 2010 at 09:09:46 GMT</small></p></td>
|
||||
<td align="right"><div class="copyright-footer"></div></td>
|
||||
</tr></table>
|
||||
<hr>
|
||||
|
@ -221,11 +221,17 @@ stored in *this.
|
||||
template <class charT, class Traits, class A>
|
||||
difference_type length(const std::basic_string<charT, Traits, A>&)const;
|
||||
|
||||
|
||||
[*Requires]: that the match_results object has been initialized as a result of a
|
||||
successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and
|
||||
that the underlying iterators have not been subsequently invalidated. Will raise a
|
||||
`std::logic_error` if the match_results object was not initialized.
|
||||
|
||||
[*Effects]: Returns the length of sub-expression /sub/, that is to say:
|
||||
`(*this)[sub].length()`.
|
||||
|
||||
The overloads that accept a string refer to a named sub-expression /n/.
|
||||
In the event that there is no such named sub-expression then returns an empty string.
|
||||
In the event that there is no such named sub-expression then returns zero.
|
||||
|
||||
The template overloads of this function, allow the string and\/or character type
|
||||
to be different from the character type of the underlying sequence and\/or regular expression:
|
||||
@ -244,12 +250,17 @@ Unicode character type.
|
||||
template <class charT, class Traits, class A>
|
||||
difference_type position(const std::basic_string<charT, Traits, A>&)const;
|
||||
|
||||
[*Requires]: that the match_results object has been initialized as a result of a
|
||||
successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and
|
||||
that the underlying iterators have not been subsequently invalidated. Will raise a
|
||||
`std::logic_error` if the match_results object was not initialized.
|
||||
|
||||
[*Effects]: Returns the starting location of sub-expression /sub/, or -1 if /sub/ was
|
||||
not matched. Note that if this represents a partial match , then `position()`
|
||||
will return the location of the partial match even though `(*this)[0].matched` is false.
|
||||
|
||||
The overloads that accept a string refer to a named sub-expression /n/.
|
||||
In the event that there is no such named sub-expression then returns an empty string.
|
||||
In the event that there is no such named sub-expression then returns -1.
|
||||
|
||||
The template overloads of this function, allow the string and\/or character type
|
||||
to be different from the character type of the underlying sequence and\/or regular expression:
|
||||
@ -271,6 +282,11 @@ Unicode character type.
|
||||
template <class charT, class Traits, class A>
|
||||
string_type str(const std::basic_string<charT, Traits, A>& sub)const;
|
||||
|
||||
[*Requires]: that the match_results object has been initialized as a result of a
|
||||
successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and
|
||||
that the underlying iterators have not been subsequently invalidated. Will raise a
|
||||
`std::logic_error` if the match_results object was not initialized.
|
||||
|
||||
[*Effects]: Returns sub-expression /sub/ as a string: `string_type((*this)[sub])`.
|
||||
|
||||
The overloads that accept a string, return the string that matched the named sub-expression /n/.
|
||||
@ -296,6 +312,11 @@ Unicode character type.
|
||||
template <class charT, class Traits, class A>
|
||||
const_reference operator[](const std::basic_string<charT, Traits, A>& n) const;
|
||||
|
||||
[*Requires]: that the match_results object has been initialized as a result of a
|
||||
successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and
|
||||
that the underlying iterators have not been subsequently invalidated. Will raise a
|
||||
`std::logic_error` if the match_results object was not initialized.
|
||||
|
||||
[*Effects]: Returns a reference to the [sub_match] object representing the character
|
||||
sequence that matched marked sub-expression /n/. If `n == 0` then returns a
|
||||
reference to a [sub_match] object representing the character sequence that
|
||||
@ -321,6 +342,11 @@ Unicode character type.
|
||||
|
||||
const_reference prefix()const;
|
||||
|
||||
[*Requires]: that the match_results object has been initialized as a result of a
|
||||
successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and
|
||||
that the underlying iterators have not been subsequently invalidated. Will raise a
|
||||
`std::logic_error` if the match_results object was not initialized.
|
||||
|
||||
[*Effects]: Returns a reference to the [sub_match] object representing the
|
||||
character sequence from the start of the string being matched or searched, to the
|
||||
start of the match found.
|
||||
@ -330,6 +356,11 @@ start of the match found.
|
||||
|
||||
const_reference suffix()const;
|
||||
|
||||
[*Requires]: that the match_results object has been initialized as a result of a
|
||||
successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and
|
||||
that the underlying iterators have not been subsequently invalidated. Will raise a
|
||||
`std::logic_error` if the match_results object was not initialized.
|
||||
|
||||
[*Effects]: Returns a reference to the [sub_match] object representing the
|
||||
character sequence from the end of the match found to the end of the
|
||||
string being matched or searched.
|
||||
@ -368,7 +399,15 @@ that computes the replacement string from a function call: either
|
||||
`fmt(*this)` which must return a container of `char_type`'s to be used as the
|
||||
replacement text, or either `fmt(*this, out)` or `fmt(*this, out, flags)`, both of
|
||||
which write the replacement text to `*out`, and then return the new
|
||||
OutputIterator position.
|
||||
OutputIterator position. Note that if the formatter is a functor, then it is
|
||||
['passed by value]: users that want to pass function objects with internal state
|
||||
might want to use [@../../../../doc/html/ref.html Boost.Ref] to wrap the object so
|
||||
that it's passed by reference.
|
||||
|
||||
[*Requires]: that the match_results object has been initialized as a result of a
|
||||
successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and
|
||||
that the underlying iterators have not been subsequently invalidated. Will raise a
|
||||
`std::logic_error` if the match_results object was not initialized.
|
||||
|
||||
[*Effects]: If `fmt` is either a null-terminated string, or a
|
||||
container of `char_type`'s, then copies the character sequence `[fmt.begin(), fmt.end())` to
|
||||
@ -383,7 +422,7 @@ ECMA-262, ECMAScript Language Specification, Chapter 15 part
|
||||
If `fmt` is a function object, then depending on the number of arguments
|
||||
the function object accepts, it will either:
|
||||
|
||||
* Call `fmt(*this)` and copy the result to `OutputIterator`
|
||||
* Call `fmt(*this)` and copy the string returned to `OutputIterator`
|
||||
/out/.
|
||||
* Call `fmt(*this, out)`.
|
||||
* Call `fmt(*this, out, flags)`.
|
||||
@ -411,6 +450,11 @@ replacement text, or either `fmt(*this, out)` or `fmt(*this, out, flags)`, both
|
||||
which write the replacement text to `*out`, and then return the new
|
||||
OutputIterator position.
|
||||
|
||||
[*Requires]: that the match_results object has been initialized as a result of a
|
||||
successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and
|
||||
that the underlying iterators have not been subsequently invalidated. Will raise a
|
||||
`std::logic_error` if the match_results object was not initialized.
|
||||
|
||||
[*Effects]:
|
||||
If `fmt` is either a null-terminated string, or a
|
||||
container of `char_type`'s, then copies the string /fmt/: For each format specifier or
|
||||
@ -462,6 +506,11 @@ rely on that.
|
||||
|
||||
const capture_sequence_type& captures(std::size_t i)const;
|
||||
|
||||
[*Requires]: that the match_results object has been initialized as a result of a
|
||||
successful call to [regex_search] or [regex_match] or was returned from a [regex_iterator], and
|
||||
that the underlying iterators have not been subsequently invalidated. Will raise a
|
||||
`std::logic_error` if the match_results object was not initialized.
|
||||
|
||||
[*Effects]: returns a sequence containing all the captures obtained for sub-expression i.
|
||||
|
||||
[*Returns]: `(*this)[i].captures();`
|
||||
|
@ -69,7 +69,10 @@ that computes the replacement string from a function call: either
|
||||
replacement text, or either `fmt(what, out)` or `fmt(what, out, flags)`, both of
|
||||
which write the replacement text to `*out`, and then return the new
|
||||
OutputIterator position. In each case `what` is the [match_results] object
|
||||
that represents the match found.
|
||||
that represents the match found. Note that if the formatter is a functor, then it is
|
||||
['passed by value]: users that want to pass function objects with internal state
|
||||
might want to use [@../../../../doc/html/ref.html Boost.Ref] to wrap the object so
|
||||
that it's passed by reference.
|
||||
|
||||
[*Effects]: Constructs an [regex_iterator] object:
|
||||
|
||||
|
@ -27,6 +27,13 @@ Almost all Perl features are supported, except for:
|
||||
|
||||
(??{code}) Not implementable in a compiled strongly typed language.
|
||||
|
||||
(*VERB) The [@http://perldoc.perl.org/perlre.html#Special-Backtracking-Control-Verbs
|
||||
backtracking control verbs] are not recognised or implemented at this time.
|
||||
|
||||
In addition the following features behave slightly differently from Perl:
|
||||
|
||||
^ $ \Z These recognise any line termination sequence, and not just \\n: see the Unicode requirements below.
|
||||
|
||||
[h4 POSIX]
|
||||
|
||||
All the POSIX basic and extended regular expression features are supported,
|
||||
|
@ -145,9 +145,9 @@ consume as little input as possible while still producing a match.
|
||||
|
||||
[h4 Pocessive repeats]
|
||||
|
||||
By default when a repeated patten does not match then the engine will backtrack until
|
||||
By default when a repeated pattern does not match then the engine will backtrack until
|
||||
a match is found. However, this behaviour can sometime be undesireable so there are
|
||||
also "pocessive" repeats: these match as much as possible and do not then allow
|
||||
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.
|
||||
@ -376,12 +376,13 @@ 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 an optional sequence of newlines at the end of a buffer:
|
||||
equivalent to the regular expression =\n*\z=
|
||||
\\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
|
||||
behaves as if matching [^(?=\\n?\\z)].
|
||||
|
||||
[h5 Continuation Escape]
|
||||
|
||||
|
@ -10,9 +10,12 @@ project
|
||||
# There are unidentified linker problems on these platforms:
|
||||
<toolset>mipspro-7.4:<link>static
|
||||
<toolset>sun-5.9:<link>static
|
||||
<toolset>msvc:<warnings>all
|
||||
<toolset>gcc:<warnings>all
|
||||
<toolset>gcc:<cxxflags>-Wextra
|
||||
<define>U_USING_ICU_NAMESPACE=0
|
||||
;
|
||||
|
||||
|
||||
rule regex-test-run ( sources + : input * : name * )
|
||||
{
|
||||
return [
|
||||
|
@ -13,9 +13,14 @@
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <boost/program_options.hpp>
|
||||
#include <boost/regex.hpp>
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning(disable:4512 4244)
|
||||
#endif
|
||||
|
||||
#include <boost/program_options.hpp>
|
||||
|
||||
namespace po = boost::program_options;
|
||||
|
||||
int after_context;
|
||||
|
@ -152,9 +152,15 @@ int main()
|
||||
assert(file == "d.h");
|
||||
|
||||
// Greek text extraction with u32regex_search:
|
||||
U_NAMESPACE_QUALIFIER UnicodeString text = L"Some where in \x0391\x039D\x0395\x0398\x0391 2004";
|
||||
const UChar t[] = {
|
||||
'S', 'o', 'm', 'e', ' ', 'w', 'h', 'e', 'r', 'e', ' ', 'i', 'n', 0x0391, 0x039D, 0x0395, 0x0398, 0x0391, 0
|
||||
};
|
||||
const UChar g[] = {
|
||||
0x0391, 0x039D, 0x0395, 0x0398, 0x0391, 0
|
||||
};
|
||||
U_NAMESPACE_QUALIFIER UnicodeString text = t;
|
||||
U_NAMESPACE_QUALIFIER UnicodeString greek = extract_greek(text);
|
||||
assert(greek == L"\x0391\x039D\x0395\x0398\x0391 2004");
|
||||
assert(greek == g);
|
||||
|
||||
// extract currency symbols with associated value, use iterator interface:
|
||||
std::string text2 = " $100.23 or \xC2\xA3""198.12 "; // \xC2\xA3 is the pound sign encoded in UTF-8
|
||||
|
@ -61,7 +61,7 @@ void search(std::istream& is)
|
||||
std::memmove(buf, next_pos, leftover);
|
||||
// fill the rest from the stream:
|
||||
is.read(buf + leftover, size);
|
||||
unsigned read = is.gcount();
|
||||
std::streamsize read = is.gcount();
|
||||
// check to see if we've run out of text:
|
||||
have_more = read == size;
|
||||
// reset next_pos:
|
||||
|
@ -51,7 +51,7 @@ void search(std::istream& is)
|
||||
std::memmove(buf, next_pos, leftover);
|
||||
// fill the rest from the stream:
|
||||
is.read(buf + leftover, size);
|
||||
unsigned read = is.gcount();
|
||||
std::streamsize read = is.gcount();
|
||||
// check to see if we've run out of text:
|
||||
have_more = read == size;
|
||||
// reset next_pos:
|
||||
|
@ -89,7 +89,7 @@ void load_file(std::string& s, std::istream& is)
|
||||
{
|
||||
s.erase();
|
||||
if(is.bad()) return;
|
||||
s.reserve(is.rdbuf()->in_avail());
|
||||
s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail()));
|
||||
char c;
|
||||
while(is.get(c))
|
||||
{
|
||||
|
@ -84,7 +84,7 @@ void load_file(std::string& s, std::istream& is)
|
||||
{
|
||||
s.erase();
|
||||
if(is.bad()) return;
|
||||
s.reserve(is.rdbuf()->in_avail());
|
||||
s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail()));
|
||||
char c;
|
||||
while(is.get(c))
|
||||
{
|
||||
|
@ -107,7 +107,7 @@ void load_file(std::string& s, std::istream& is)
|
||||
{
|
||||
s.erase();
|
||||
if(is.bad()) return;
|
||||
s.reserve(is.rdbuf()->in_avail());
|
||||
s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail()));
|
||||
char c;
|
||||
while(is.get(c))
|
||||
{
|
||||
|
@ -72,7 +72,7 @@ void load_file(std::string& s, std::istream& is)
|
||||
{
|
||||
s.erase();
|
||||
if(is.bad()) return;
|
||||
s.reserve(is.rdbuf()->in_avail());
|
||||
s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail()));
|
||||
char c;
|
||||
while(is.get(c))
|
||||
{
|
||||
|
@ -42,7 +42,7 @@ void load_file(std::string& s, std::istream& is)
|
||||
{
|
||||
s.erase();
|
||||
if(is.bad()) return;
|
||||
s.reserve(is.rdbuf()->in_avail());
|
||||
s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail()));
|
||||
char c;
|
||||
while(is.get(c))
|
||||
{
|
||||
|
@ -42,7 +42,7 @@ void load_file(std::string& s, std::istream& is)
|
||||
{
|
||||
s.erase();
|
||||
if(is.bad()) return;
|
||||
s.reserve(is.rdbuf()->in_avail());
|
||||
s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail()));
|
||||
char c;
|
||||
while(is.get(c))
|
||||
{
|
||||
|
@ -85,7 +85,7 @@ void load_file(std::string& s, std::istream& is)
|
||||
{
|
||||
s.erase();
|
||||
if(is.bad()) return;
|
||||
s.reserve(is.rdbuf()->in_avail());
|
||||
s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail()));
|
||||
char c;
|
||||
while(is.get(c))
|
||||
{
|
||||
|
@ -33,7 +33,7 @@ void load_file(std::string& s, std::istream& is)
|
||||
//
|
||||
// attempt to grow string buffer to match file size,
|
||||
// this doesn't always work...
|
||||
s.reserve(is.rdbuf()->in_avail());
|
||||
s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail()));
|
||||
char c;
|
||||
while(is.get(c))
|
||||
{
|
||||
|
@ -32,7 +32,7 @@ void load_file(std::string& s, std::istream& is)
|
||||
//
|
||||
// attempt to grow string buffer to match file size,
|
||||
// this doesn't always work...
|
||||
s.reserve(is.rdbuf()->in_avail());
|
||||
s.reserve(static_cast<std::string::size_type>(is.rdbuf()->in_avail()));
|
||||
char c;
|
||||
while(is.get(c))
|
||||
{
|
||||
|
@ -76,6 +76,49 @@ namespace std{
|
||||
typedef boost::char_architype char_type;
|
||||
};
|
||||
}
|
||||
//
|
||||
// Allocator architype:
|
||||
//
|
||||
template <class T>
|
||||
class allocator_architype
|
||||
{
|
||||
public:
|
||||
typedef T* pointer;
|
||||
typedef const T* const_pointer;
|
||||
typedef T& reference;
|
||||
typedef const T& const_reference;
|
||||
typedef T value_type;
|
||||
typedef unsigned size_type;
|
||||
typedef int difference_type;
|
||||
|
||||
template <class U>
|
||||
struct rebind
|
||||
{
|
||||
typedef allocator_architype<U> other;
|
||||
};
|
||||
|
||||
pointer address(reference r);
|
||||
const_pointer address(const_reference r);
|
||||
pointer allocate(size_type);
|
||||
pointer allocate(size_type, pointer);
|
||||
void deallocate(pointer, size_type);
|
||||
size_type max_size()const;
|
||||
|
||||
allocator_architype();
|
||||
allocator_architype(const allocator_architype&);
|
||||
|
||||
template <class Other>
|
||||
allocator_architype(const allocator_architype<Other>&);
|
||||
|
||||
void construct(pointer, const_reference);
|
||||
void destroy(pointer);
|
||||
};
|
||||
|
||||
template <class T>
|
||||
bool operator == (const allocator_architype<T>&, const allocator_architype<T>&);
|
||||
template <class T>
|
||||
bool operator != (const allocator_architype<T>&, const allocator_architype<T>&);
|
||||
|
||||
namespace boost{
|
||||
//
|
||||
// regex_traits_architype:
|
||||
@ -244,7 +287,8 @@ struct BaseRegexConcept
|
||||
typedef const value_type* pointer_type;
|
||||
typedef bidirectional_iterator_archetype<value_type> BidiIterator;
|
||||
typedef global_regex_namespace::sub_match<BidiIterator> sub_match_type;
|
||||
typedef global_regex_namespace::match_results<BidiIterator> match_results_type;
|
||||
typedef global_regex_namespace::match_results<BidiIterator, allocator_architype<sub_match_type> > match_results_type;
|
||||
typedef global_regex_namespace::match_results<BidiIterator> match_results_default_type;
|
||||
typedef output_iterator_archetype<value_type> OutIterator;
|
||||
typedef typename regex_traits_computer<Regex>::type traits_type;
|
||||
typedef global_regex_namespace::regex_iterator<BidiIterator, value_type, traits_type> regex_iterator_type;
|
||||
@ -318,7 +362,7 @@ struct BaseRegexConcept
|
||||
const global_regex_namespace::regex_error except(e1);
|
||||
e1 = except.code();
|
||||
|
||||
typedef typename Regex::value_type value_type;
|
||||
typedef typename Regex::value_type regex_value_type;
|
||||
function_requires< RegexTraitsConcept<global_regex_namespace::regex_traits<char> > >();
|
||||
function_requires< BaseRegexConcept<global_regex_namespace::basic_regex<char> > >();
|
||||
}
|
||||
@ -484,10 +528,10 @@ struct BaseRegexConcept
|
||||
typedef typename regex_iterator_type::reference rit_reference;
|
||||
typedef typename regex_iterator_type::iterator_category rit_iterator_category;
|
||||
BOOST_STATIC_ASSERT((::boost::is_same<rit_regex_type, Regex>::value));
|
||||
BOOST_STATIC_ASSERT((::boost::is_same<rit_value_type, match_results_type>::value));
|
||||
BOOST_STATIC_ASSERT((::boost::is_same<rit_value_type, match_results_default_type>::value));
|
||||
BOOST_STATIC_ASSERT((::boost::is_same<rit_difference_type, std::ptrdiff_t>::value));
|
||||
BOOST_STATIC_ASSERT((::boost::is_same<rit_pointer, const match_results_type*>::value));
|
||||
BOOST_STATIC_ASSERT((::boost::is_same<rit_reference, const match_results_type&>::value));
|
||||
BOOST_STATIC_ASSERT((::boost::is_same<rit_pointer, const match_results_default_type*>::value));
|
||||
BOOST_STATIC_ASSERT((::boost::is_same<rit_reference, const match_results_default_type&>::value));
|
||||
BOOST_STATIC_ASSERT((::boost::is_convertible<rit_iterator_category*, std::forward_iterator_tag*>::value));
|
||||
// this takes care of most of the checks needed:
|
||||
function_requires<ForwardIteratorConcept<regex_iterator_type> >();
|
||||
@ -540,7 +584,10 @@ struct BaseRegexConcept
|
||||
OutIterator m_out;
|
||||
BidiIterator m_in;
|
||||
global_regex_namespace::regex_constants::match_flag_type m_mft;
|
||||
global_regex_namespace::match_results<pointer_type> m_pmatch;
|
||||
global_regex_namespace::match_results<
|
||||
pointer_type,
|
||||
allocator_architype<global_regex_namespace::sub_match<pointer_type> > >
|
||||
m_pmatch;
|
||||
|
||||
BaseRegexConcept();
|
||||
BaseRegexConcept(const BaseRegexConcept&);
|
||||
@ -564,7 +611,7 @@ struct RegexConcept
|
||||
typedef std::basic_string<value_type> string_type;
|
||||
typedef boost::bidirectional_iterator_archetype<value_type> BidiIterator;
|
||||
typedef global_regex_namespace::sub_match<BidiIterator> sub_match_type;
|
||||
typedef global_regex_namespace::match_results<BidiIterator> match_results_type;
|
||||
typedef global_regex_namespace::match_results<BidiIterator, allocator_architype<sub_match_type> > match_results_type;
|
||||
typedef output_iterator_archetype<value_type> OutIterator;
|
||||
|
||||
|
||||
@ -739,7 +786,7 @@ struct RegexConcept
|
||||
OutIterator m_out;
|
||||
BidiIterator m_in;
|
||||
global_regex_namespace::regex_constants::match_flag_type m_mft;
|
||||
global_regex_namespace::match_results<typename string_type::const_iterator> m_smatch;
|
||||
global_regex_namespace::match_results<typename string_type::const_iterator, allocator_architype<global_regex_namespace::sub_match<typename string_type::const_iterator> > > m_smatch;
|
||||
|
||||
RegexConcept();
|
||||
RegexConcept(const RegexConcept&);
|
||||
@ -752,7 +799,7 @@ template <class M>
|
||||
struct functor1
|
||||
{
|
||||
typedef typename M::char_type char_type;
|
||||
const char_type* operator()(const M&)
|
||||
const char_type* operator()(const M&)const
|
||||
{
|
||||
static const char_type c = static_cast<char_type>(0);
|
||||
return &c;
|
||||
@ -762,7 +809,7 @@ template <class M>
|
||||
struct functor1b
|
||||
{
|
||||
typedef typename M::char_type char_type;
|
||||
std::vector<char_type> operator()(const M&)
|
||||
std::vector<char_type> operator()(const M&)const
|
||||
{
|
||||
static const std::vector<char_type> c;
|
||||
return c;
|
||||
@ -772,7 +819,7 @@ template <class M>
|
||||
struct functor2
|
||||
{
|
||||
template <class O>
|
||||
O operator()(const M& /*m*/, O i)
|
||||
O operator()(const M& /*m*/, O i)const
|
||||
{
|
||||
return i;
|
||||
}
|
||||
@ -781,7 +828,7 @@ template <class M>
|
||||
struct functor3
|
||||
{
|
||||
template <class O>
|
||||
O operator()(const M& /*m*/, O i, regex_constants::match_flag_type)
|
||||
O operator()(const M& /*m*/, O i, regex_constants::match_flag_type)const
|
||||
{
|
||||
return i;
|
||||
}
|
||||
@ -806,7 +853,8 @@ struct BoostRegexConcept
|
||||
typedef bidirectional_iterator_archetype<value_type> BidiIterator;
|
||||
typedef output_iterator_archetype<value_type> OutputIterator;
|
||||
typedef global_regex_namespace::sub_match<BidiIterator> sub_match_type;
|
||||
typedef global_regex_namespace::match_results<BidiIterator> match_results_type;
|
||||
typedef global_regex_namespace::match_results<BidiIterator, allocator_architype<sub_match_type> > match_results_type;
|
||||
typedef global_regex_namespace::match_results<BidiIterator> match_results_default_type;
|
||||
|
||||
void constraints()
|
||||
{
|
||||
@ -930,36 +978,90 @@ struct BoostRegexConcept
|
||||
//
|
||||
regex_constants::match_flag_type f = regex_constants::match_default;
|
||||
OutputIterator out = static_object<OutputIterator>::get();
|
||||
functor3<match_results_type> func3;
|
||||
out = regex_format(out, m_cresults, func3, f);
|
||||
out = regex_format(out, m_cresults, func3);
|
||||
functor2<match_results_type> func2;
|
||||
out = regex_format(out, m_cresults, func2, f);
|
||||
out = regex_format(out, m_cresults, func2);
|
||||
functor1<match_results_type> func1;
|
||||
out = regex_format(out, m_cresults, func1, f);
|
||||
out = regex_format(out, m_cresults, func1);
|
||||
|
||||
functor3<match_results_default_type> func3;
|
||||
functor2<match_results_default_type> func2;
|
||||
functor1<match_results_default_type> func1;
|
||||
|
||||
functor3<match_results_type> func3b;
|
||||
functor2<match_results_type> func2b;
|
||||
functor1<match_results_type> func1b;
|
||||
|
||||
m_string += regex_format(m_cresults, func3, f);
|
||||
m_string += regex_format(m_cresults, func3);
|
||||
m_string += regex_format(m_cresults, func2, f);
|
||||
m_string += regex_format(m_cresults, func2);
|
||||
m_string += regex_format(m_cresults, func1, f);
|
||||
m_string += regex_format(m_cresults, func1);
|
||||
out = regex_format(out, m_cresults, func3b, f);
|
||||
out = regex_format(out, m_cresults, func3b);
|
||||
out = regex_format(out, m_cresults, func2b, f);
|
||||
out = regex_format(out, m_cresults, func2b);
|
||||
out = regex_format(out, m_cresults, func1b, f);
|
||||
out = regex_format(out, m_cresults, func1b);
|
||||
out = regex_format(out, m_cresults, boost::ref(func3b), f);
|
||||
out = regex_format(out, m_cresults, boost::ref(func3b));
|
||||
out = regex_format(out, m_cresults, boost::ref(func2b), f);
|
||||
out = regex_format(out, m_cresults, boost::ref(func2b));
|
||||
out = regex_format(out, m_cresults, boost::ref(func1b), f);
|
||||
out = regex_format(out, m_cresults, boost::ref(func1b));
|
||||
out = regex_format(out, m_cresults, boost::cref(func3b), f);
|
||||
out = regex_format(out, m_cresults, boost::cref(func3b));
|
||||
out = regex_format(out, m_cresults, boost::cref(func2b), f);
|
||||
out = regex_format(out, m_cresults, boost::cref(func2b));
|
||||
out = regex_format(out, m_cresults, boost::cref(func1b), f);
|
||||
out = regex_format(out, m_cresults, boost::cref(func1b));
|
||||
|
||||
out = m_cresults.format(out, func3, f);
|
||||
out = m_cresults.format(out, func3);
|
||||
out = m_cresults.format(out, func2, f);
|
||||
out = m_cresults.format(out, func2);
|
||||
out = m_cresults.format(out, func1, f);
|
||||
out = m_cresults.format(out, func1);
|
||||
m_string += regex_format(m_cresults, func3b, f);
|
||||
m_string += regex_format(m_cresults, func3b);
|
||||
m_string += regex_format(m_cresults, func2b, f);
|
||||
m_string += regex_format(m_cresults, func2b);
|
||||
m_string += regex_format(m_cresults, func1b, f);
|
||||
m_string += regex_format(m_cresults, func1b);
|
||||
m_string += regex_format(m_cresults, boost::ref(func3b), f);
|
||||
m_string += regex_format(m_cresults, boost::ref(func3b));
|
||||
m_string += regex_format(m_cresults, boost::ref(func2b), f);
|
||||
m_string += regex_format(m_cresults, boost::ref(func2b));
|
||||
m_string += regex_format(m_cresults, boost::ref(func1b), f);
|
||||
m_string += regex_format(m_cresults, boost::ref(func1b));
|
||||
m_string += regex_format(m_cresults, boost::cref(func3b), f);
|
||||
m_string += regex_format(m_cresults, boost::cref(func3b));
|
||||
m_string += regex_format(m_cresults, boost::cref(func2b), f);
|
||||
m_string += regex_format(m_cresults, boost::cref(func2b));
|
||||
m_string += regex_format(m_cresults, boost::cref(func1b), f);
|
||||
m_string += regex_format(m_cresults, boost::cref(func1b));
|
||||
|
||||
m_string += m_cresults.format(func3, f);
|
||||
m_string += m_cresults.format(func3);
|
||||
m_string += m_cresults.format(func2, f);
|
||||
m_string += m_cresults.format(func2);
|
||||
m_string += m_cresults.format(func1, f);
|
||||
m_string += m_cresults.format(func1);
|
||||
out = m_cresults.format(out, func3b, f);
|
||||
out = m_cresults.format(out, func3b);
|
||||
out = m_cresults.format(out, func2b, f);
|
||||
out = m_cresults.format(out, func2b);
|
||||
out = m_cresults.format(out, func1b, f);
|
||||
out = m_cresults.format(out, func1b);
|
||||
out = m_cresults.format(out, boost::ref(func3b), f);
|
||||
out = m_cresults.format(out, boost::ref(func3b));
|
||||
out = m_cresults.format(out, boost::ref(func2b), f);
|
||||
out = m_cresults.format(out, boost::ref(func2b));
|
||||
out = m_cresults.format(out, boost::ref(func1b), f);
|
||||
out = m_cresults.format(out, boost::ref(func1b));
|
||||
out = m_cresults.format(out, boost::cref(func3b), f);
|
||||
out = m_cresults.format(out, boost::cref(func3b));
|
||||
out = m_cresults.format(out, boost::cref(func2b), f);
|
||||
out = m_cresults.format(out, boost::cref(func2b));
|
||||
out = m_cresults.format(out, boost::cref(func1b), f);
|
||||
out = m_cresults.format(out, boost::cref(func1b));
|
||||
|
||||
m_string += m_cresults.format(func3b, f);
|
||||
m_string += m_cresults.format(func3b);
|
||||
m_string += m_cresults.format(func2b, f);
|
||||
m_string += m_cresults.format(func2b);
|
||||
m_string += m_cresults.format(func1b, f);
|
||||
m_string += m_cresults.format(func1b);
|
||||
m_string += m_cresults.format(boost::ref(func3b), f);
|
||||
m_string += m_cresults.format(boost::ref(func3b));
|
||||
m_string += m_cresults.format(boost::ref(func2b), f);
|
||||
m_string += m_cresults.format(boost::ref(func2b));
|
||||
m_string += m_cresults.format(boost::ref(func1b), f);
|
||||
m_string += m_cresults.format(boost::ref(func1b));
|
||||
m_string += m_cresults.format(boost::cref(func3b), f);
|
||||
m_string += m_cresults.format(boost::cref(func3b));
|
||||
m_string += m_cresults.format(boost::cref(func2b), f);
|
||||
m_string += m_cresults.format(boost::cref(func2b));
|
||||
m_string += m_cresults.format(boost::cref(func1b), f);
|
||||
m_string += m_cresults.format(boost::cref(func1b));
|
||||
|
||||
out = regex_replace(out, m_in, m_in, ce, func3, f);
|
||||
out = regex_replace(out, m_in, m_in, ce, func3);
|
||||
@ -967,6 +1069,18 @@ struct BoostRegexConcept
|
||||
out = regex_replace(out, m_in, m_in, ce, func2);
|
||||
out = regex_replace(out, m_in, m_in, ce, func1, f);
|
||||
out = regex_replace(out, m_in, m_in, ce, func1);
|
||||
out = regex_replace(out, m_in, m_in, ce, boost::ref(func3), f);
|
||||
out = regex_replace(out, m_in, m_in, ce, boost::ref(func3));
|
||||
out = regex_replace(out, m_in, m_in, ce, boost::ref(func2), f);
|
||||
out = regex_replace(out, m_in, m_in, ce, boost::ref(func2));
|
||||
out = regex_replace(out, m_in, m_in, ce, boost::ref(func1), f);
|
||||
out = regex_replace(out, m_in, m_in, ce, boost::ref(func1));
|
||||
out = regex_replace(out, m_in, m_in, ce, boost::cref(func3), f);
|
||||
out = regex_replace(out, m_in, m_in, ce, boost::cref(func3));
|
||||
out = regex_replace(out, m_in, m_in, ce, boost::cref(func2), f);
|
||||
out = regex_replace(out, m_in, m_in, ce, boost::cref(func2));
|
||||
out = regex_replace(out, m_in, m_in, ce, boost::cref(func1), f);
|
||||
out = regex_replace(out, m_in, m_in, ce, boost::cref(func1));
|
||||
|
||||
functor3<match_results<typename string_type::const_iterator> > func3s;
|
||||
functor2<match_results<typename string_type::const_iterator> > func2s;
|
||||
@ -977,6 +1091,18 @@ struct BoostRegexConcept
|
||||
m_string += regex_replace(m_string, ce, func2s);
|
||||
m_string += regex_replace(m_string, ce, func1s, f);
|
||||
m_string += regex_replace(m_string, ce, func1s);
|
||||
m_string += regex_replace(m_string, ce, boost::ref(func3s), f);
|
||||
m_string += regex_replace(m_string, ce, boost::ref(func3s));
|
||||
m_string += regex_replace(m_string, ce, boost::ref(func2s), f);
|
||||
m_string += regex_replace(m_string, ce, boost::ref(func2s));
|
||||
m_string += regex_replace(m_string, ce, boost::ref(func1s), f);
|
||||
m_string += regex_replace(m_string, ce, boost::ref(func1s));
|
||||
m_string += regex_replace(m_string, ce, boost::cref(func3s), f);
|
||||
m_string += regex_replace(m_string, ce, boost::cref(func3s));
|
||||
m_string += regex_replace(m_string, ce, boost::cref(func2s), f);
|
||||
m_string += regex_replace(m_string, ce, boost::cref(func2s));
|
||||
m_string += regex_replace(m_string, ce, boost::cref(func1s), f);
|
||||
m_string += regex_replace(m_string, ce, boost::cref(func1s));
|
||||
}
|
||||
|
||||
std::basic_ostream<value_type> m_stream;
|
||||
|
@ -186,16 +186,19 @@
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#if defined(BOOST_HAS_DECLSPEC) && (defined(BOOST_REGEX_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && !defined(BOOST_REGEX_STATIC_LINK)
|
||||
# if defined(BOOST_REGEX_SOURCE)
|
||||
# define BOOST_REGEX_DECL __declspec(dllexport)
|
||||
# define BOOST_REGEX_BUILD_DLL
|
||||
# else
|
||||
# define BOOST_REGEX_DECL __declspec(dllimport)
|
||||
# endif
|
||||
#ifndef BOOST_SYMBOL_EXPORT
|
||||
# define BOOST_SYMBOL_EXPORT
|
||||
# define BOOST_SYMBOL_IMPORT
|
||||
#endif
|
||||
|
||||
#ifndef BOOST_REGEX_DECL
|
||||
#if (defined(BOOST_REGEX_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && !defined(BOOST_REGEX_STATIC_LINK)
|
||||
# if defined(BOOST_REGEX_SOURCE)
|
||||
# define BOOST_REGEX_DECL BOOST_SYMBOL_EXPORT
|
||||
# define BOOST_REGEX_BUILD_DLL
|
||||
# else
|
||||
# define BOOST_REGEX_DECL BOOST_SYMBOL_IMPORT
|
||||
# endif
|
||||
#else
|
||||
# define BOOST_REGEX_DECL
|
||||
#endif
|
||||
|
||||
|
@ -27,6 +27,10 @@
|
||||
#include <boost/mpl/int_fwd.hpp>
|
||||
#include <bitset>
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning (push)
|
||||
#pragma warning (disable: 4251)
|
||||
#endif
|
||||
|
||||
namespace boost{
|
||||
|
||||
@ -1015,6 +1019,10 @@ inline U_NAMESPACE_QUALIFIER UnicodeString u32regex_replace(const U_NAMESPACE_QU
|
||||
|
||||
} // namespace boost.
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning (pop)
|
||||
#endif
|
||||
|
||||
#include <boost/regex/v4/u32regex_iterator.hpp>
|
||||
#include <boost/regex/v4/u32regex_token_iterator.hpp>
|
||||
|
||||
|
@ -769,14 +769,14 @@ void basic_regex_creator<charT, traits>::fixup_recursions(re_syntax_base* state)
|
||||
case syntax_element_assert_backref:
|
||||
{
|
||||
// just check that the index is valid:
|
||||
int id = static_cast<const re_brace*>(state)->index;
|
||||
if(id < 0)
|
||||
int idx = static_cast<const re_brace*>(state)->index;
|
||||
if(idx < 0)
|
||||
{
|
||||
id = -id-1;
|
||||
if(id >= 10000)
|
||||
idx = -idx-1;
|
||||
if(idx >= 10000)
|
||||
{
|
||||
id = m_pdata->get_id(id);
|
||||
if(id <= 0)
|
||||
idx = m_pdata->get_id(idx);
|
||||
if(idx <= 0)
|
||||
{
|
||||
// check of sub-expression that doesn't exist:
|
||||
if(0 == this->m_pdata->m_status) // update the error code if not already set
|
||||
@ -804,12 +804,12 @@ void basic_regex_creator<charT, traits>::fixup_recursions(re_syntax_base* state)
|
||||
{
|
||||
bool ok = false;
|
||||
re_syntax_base* p = base;
|
||||
int id = static_cast<re_jump*>(state)->alt.i;
|
||||
if(id > 10000)
|
||||
id = m_pdata->get_id(id);
|
||||
std::ptrdiff_t idx = static_cast<re_jump*>(state)->alt.i;
|
||||
if(idx > 10000)
|
||||
idx = m_pdata->get_id(idx);
|
||||
while(p)
|
||||
{
|
||||
if((p->type == syntax_element_startmark) && (static_cast<re_brace*>(p)->index == id))
|
||||
if((p->type == syntax_element_startmark) && (static_cast<re_brace*>(p)->index == idx))
|
||||
{
|
||||
//
|
||||
// We've found the target of the recursion, set the jump target:
|
||||
@ -833,7 +833,7 @@ void basic_regex_creator<charT, traits>::fixup_recursions(re_syntax_base* state)
|
||||
next_rep_id = static_cast<re_repeat*>(p)->state_id;
|
||||
break;
|
||||
case syntax_element_endmark:
|
||||
if(static_cast<const re_brace*>(p)->index == id)
|
||||
if(static_cast<const re_brace*>(p)->index == idx)
|
||||
next_rep_id = -1;
|
||||
break;
|
||||
default:
|
||||
@ -1039,6 +1039,14 @@ int basic_regex_creator<charT, traits>::calculate_backstep(re_syntax_base* state
|
||||
case syntax_element_jump:
|
||||
state = static_cast<re_jump*>(state)->alt.p;
|
||||
continue;
|
||||
case syntax_element_alt:
|
||||
{
|
||||
int r1 = calculate_backstep(state->next.p);
|
||||
int r2 = calculate_backstep(static_cast<re_alt*>(state)->alt.p);
|
||||
if((r1 < 0) || (r1 != r2))
|
||||
return -1;
|
||||
return result + r1;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -1543,3 +1551,4 @@ void basic_regex_creator<charT, traits>::probe_leading_repeat(re_syntax_base* st
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -1906,7 +1906,9 @@ bool basic_regex_parser<charT, traits>::parse_perl_extension()
|
||||
m_has_case_change = false;
|
||||
charT name_delim;
|
||||
int mark_reset = m_mark_reset;
|
||||
int max_mark = m_max_mark;
|
||||
m_mark_reset = -1;
|
||||
m_max_mark = m_mark_count;
|
||||
int v;
|
||||
//
|
||||
// select the actual extension used:
|
||||
@ -2536,6 +2538,7 @@ option_group_jump:
|
||||
m_mark_count = m_max_mark;
|
||||
}
|
||||
m_mark_reset = mark_reset;
|
||||
m_max_mark = max_mark;
|
||||
|
||||
|
||||
if(markid > 0)
|
||||
|
@ -56,7 +56,7 @@
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4786)
|
||||
#pragma warning(disable:4786 4251)
|
||||
#endif
|
||||
|
||||
namespace boost{
|
||||
|
@ -118,10 +118,14 @@ template class BOOST_REGEX_TEMPLATE_DECL ::boost::re_detail::perl_matcher< std::
|
||||
|
||||
#undef BOOST_REGEX_TEMPLATE_DECL
|
||||
|
||||
#elif (defined(__GNUC__) && (__GNUC__ >= 3))
|
||||
#elif (defined(__GNUC__) && (__GNUC__ >= 3)) || !defined(BOOST_NO_EXTERN_TEMPLATE)
|
||||
|
||||
# ifndef BOOST_REGEX_INSTANTIATE
|
||||
# define template __extension__ extern template
|
||||
# ifdef __GNUC__
|
||||
# define template __extension__ extern template
|
||||
# else
|
||||
# define template extern template
|
||||
# endif
|
||||
# endif
|
||||
|
||||
#if !defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_REGEX_ICU_INSTANCES)
|
||||
|
@ -393,7 +393,6 @@ public:
|
||||
std::swap(m_subs, that.m_subs);
|
||||
std::swap(m_named_subs, that.m_named_subs);
|
||||
std::swap(m_last_closed_paren, that.m_last_closed_paren);
|
||||
std::swap(m_is_singular, that.m_is_singular);
|
||||
if(m_is_singular)
|
||||
{
|
||||
if(!that.m_is_singular)
|
||||
@ -412,6 +411,7 @@ public:
|
||||
std::swap(m_base, that.m_base);
|
||||
std::swap(m_null, that.m_null);
|
||||
}
|
||||
std::swap(m_is_singular, that.m_is_singular);
|
||||
}
|
||||
bool operator==(const match_results& that)const
|
||||
{
|
||||
@ -457,7 +457,7 @@ public:
|
||||
void BOOST_REGEX_CALL set_second(BidiIterator i, size_type pos, bool m = true, bool escape_k = false)
|
||||
{
|
||||
if(pos)
|
||||
m_last_closed_paren = pos;
|
||||
m_last_closed_paren = static_cast<int>(pos);
|
||||
pos += 2;
|
||||
BOOST_ASSERT(m_subs.size() > pos);
|
||||
m_subs[pos].second = i;
|
||||
|
@ -336,7 +336,7 @@ struct recursion_info
|
||||
{
|
||||
typedef typename Results::value_type value_type;
|
||||
typedef typename value_type::iterator iterator;
|
||||
int id;
|
||||
int idx;
|
||||
const re_syntax_base* preturn_address;
|
||||
Results results;
|
||||
repeater_count<iterator>* repeater_stack;
|
||||
@ -366,7 +366,7 @@ public:
|
||||
BidiIterator l_base)
|
||||
: m_result(what), base(first), last(end),
|
||||
position(first), backstop(l_base), re(e), traits_inst(e.get_traits()),
|
||||
m_independent(false), next_count(&rep_obj), rep_obj(&next_count), recursion_stack_position(0)
|
||||
m_independent(false), next_count(&rep_obj), rep_obj(&next_count)
|
||||
{
|
||||
construct_init(e, f);
|
||||
}
|
||||
@ -468,9 +468,9 @@ private:
|
||||
// matching flags in use:
|
||||
match_flag_type m_match_flags;
|
||||
// how many states we have examined so far:
|
||||
boost::uintmax_t state_count;
|
||||
std::ptrdiff_t state_count;
|
||||
// max number of states to examine before giving up:
|
||||
boost::uintmax_t max_state_count;
|
||||
std::ptrdiff_t max_state_count;
|
||||
// whether we should ignore case or not:
|
||||
bool icase;
|
||||
// set to true when (position == last), indicates that we may have a partial match:
|
||||
@ -488,8 +488,7 @@ private:
|
||||
// the bitmask to use when determining whether a match_any matches a newline or not:
|
||||
unsigned char match_any_mask;
|
||||
// recursion information:
|
||||
recursion_info<results_type> recursion_stack[50];
|
||||
unsigned recursion_stack_position;
|
||||
std::vector<recursion_info<results_type> > recursion_stack;
|
||||
|
||||
#ifdef BOOST_REGEX_NON_RECURSIVE
|
||||
//
|
||||
@ -523,7 +522,7 @@ private:
|
||||
void push_repeater_count(int i, repeater_count<BidiIterator>** s);
|
||||
void push_single_repeat(std::size_t c, const re_repeat* r, BidiIterator last_position, int state_id);
|
||||
void push_non_greedy_repeat(const re_syntax_base* ps);
|
||||
void push_recursion(int id, const re_syntax_base* p, results_type* presults);
|
||||
void push_recursion(int idx, const re_syntax_base* p, results_type* presults);
|
||||
void push_recursion_pop();
|
||||
|
||||
// pointer to base of stack:
|
||||
|
@ -98,23 +98,23 @@ void perl_matcher<BidiIterator, Allocator, traits>::estimate_max_state_count(std
|
||||
//
|
||||
// Calculate NS^2 first:
|
||||
//
|
||||
static const boost::uintmax_t k = 100000;
|
||||
boost::uintmax_t dist = boost::re_detail::distance(base, last);
|
||||
static const std::ptrdiff_t k = 100000;
|
||||
std::ptrdiff_t dist = boost::re_detail::distance(base, last);
|
||||
if(dist == 0)
|
||||
dist = 1;
|
||||
boost::uintmax_t states = re.size();
|
||||
std::ptrdiff_t states = re.size();
|
||||
if(states == 0)
|
||||
states = 1;
|
||||
states *= states;
|
||||
if((std::numeric_limits<boost::uintmax_t>::max)() / dist < states)
|
||||
if((std::numeric_limits<std::ptrdiff_t>::max)() / dist < states)
|
||||
{
|
||||
max_state_count = (std::numeric_limits<boost::uintmax_t>::max)() - 2;
|
||||
max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits<std::ptrdiff_t>::max)() - 2);
|
||||
return;
|
||||
}
|
||||
states *= dist;
|
||||
if((std::numeric_limits<boost::uintmax_t>::max)() - k < states)
|
||||
if((std::numeric_limits<std::ptrdiff_t>::max)() - k < states)
|
||||
{
|
||||
max_state_count = (std::numeric_limits<boost::uintmax_t>::max)() - 2;
|
||||
max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits<std::ptrdiff_t>::max)() - 2);
|
||||
return;
|
||||
}
|
||||
states += k;
|
||||
@ -125,15 +125,15 @@ void perl_matcher<BidiIterator, Allocator, traits>::estimate_max_state_count(std
|
||||
// Now calculate N^2:
|
||||
//
|
||||
states = dist;
|
||||
if((std::numeric_limits<boost::uintmax_t>::max)() / dist < states)
|
||||
if((std::numeric_limits<std::ptrdiff_t>::max)() / dist < states)
|
||||
{
|
||||
max_state_count = (std::numeric_limits<boost::uintmax_t>::max)() - 2;
|
||||
max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits<std::ptrdiff_t>::max)() - 2);
|
||||
return;
|
||||
}
|
||||
states *= dist;
|
||||
if((std::numeric_limits<boost::uintmax_t>::max)() - k < states)
|
||||
if((std::numeric_limits<std::ptrdiff_t>::max)() - k < states)
|
||||
{
|
||||
max_state_count = (std::numeric_limits<boost::uintmax_t>::max)() - 2;
|
||||
max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits<std::ptrdiff_t>::max)() - 2);
|
||||
return;
|
||||
}
|
||||
states += k;
|
||||
@ -732,10 +732,10 @@ inline bool perl_matcher<BidiIterator, Allocator, traits>::match_assert_backref(
|
||||
{
|
||||
// Have we recursed into subexpression "index"?
|
||||
// If index == 0 then check for any recursion at all, otherwise for recursion to -index-1.
|
||||
int id = -index-1;
|
||||
if(id >= 10000)
|
||||
id = re.get_data().get_id(id);
|
||||
result = recursion_stack_position && ((recursion_stack[recursion_stack_position-1].id == id) || (index == 0));
|
||||
int idx = -index-1;
|
||||
if(idx >= 10000)
|
||||
idx = re.get_data().get_id(idx);
|
||||
result = !recursion_stack.empty() && ((recursion_stack.back().idx == idx) || (index == 0));
|
||||
pstate = pstate->next.p;
|
||||
}
|
||||
return result;
|
||||
|
@ -130,8 +130,8 @@ struct saved_single_repeat : public saved_state
|
||||
template <class Results>
|
||||
struct saved_recursion : public saved_state
|
||||
{
|
||||
saved_recursion(int id, const re_syntax_base* p, Results* pr)
|
||||
: saved_state(14), recursion_id(id), preturn_address(p), results(*pr)
|
||||
saved_recursion(int idx, const re_syntax_base* p, Results* pr)
|
||||
: saved_state(14), recursion_id(idx), preturn_address(p), results(*pr)
|
||||
{}
|
||||
int recursion_id;
|
||||
const re_syntax_base* preturn_address;
|
||||
@ -329,7 +329,7 @@ inline void perl_matcher<BidiIterator, Allocator, traits>::push_single_repeat(st
|
||||
}
|
||||
|
||||
template <class BidiIterator, class Allocator, class traits>
|
||||
inline void perl_matcher<BidiIterator, Allocator, traits>::push_recursion(int id, const re_syntax_base* p, results_type* presults)
|
||||
inline void perl_matcher<BidiIterator, Allocator, traits>::push_recursion(int idx, const re_syntax_base* p, results_type* presults)
|
||||
{
|
||||
saved_recursion<results_type>* pmp = static_cast<saved_recursion<results_type>*>(m_backup_state);
|
||||
--pmp;
|
||||
@ -339,7 +339,7 @@ inline void perl_matcher<BidiIterator, Allocator, traits>::push_recursion(int id
|
||||
pmp = static_cast<saved_recursion<results_type>*>(m_backup_state);
|
||||
--pmp;
|
||||
}
|
||||
(void) new (pmp)saved_recursion<results_type>(id, p, presults);
|
||||
(void) new (pmp)saved_recursion<results_type>(idx, p, presults);
|
||||
m_backup_state = pmp;
|
||||
}
|
||||
|
||||
@ -898,20 +898,19 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_recursion()
|
||||
//
|
||||
// Set new call stack:
|
||||
//
|
||||
if(recursion_stack_position >= static_cast<int>(sizeof(recursion_stack)/sizeof(recursion_stack[0])))
|
||||
if(recursion_stack.capacity() == 0)
|
||||
{
|
||||
return false;
|
||||
recursion_stack.reserve(50);
|
||||
}
|
||||
recursion_stack[recursion_stack_position].preturn_address = pstate->next.p;
|
||||
recursion_stack[recursion_stack_position].results = *m_presult;
|
||||
recursion_stack.push_back(recursion_info<results_type>());
|
||||
recursion_stack.back().preturn_address = pstate->next.p;
|
||||
recursion_stack.back().results = *m_presult;
|
||||
if(static_cast<const re_recurse*>(pstate)->state_id > 0)
|
||||
{
|
||||
push_repeater_count(static_cast<const re_recurse*>(pstate)->state_id, &next_count);
|
||||
}
|
||||
pstate = static_cast<const re_jump*>(pstate)->alt.p;
|
||||
recursion_stack[recursion_stack_position].id = static_cast<const re_brace*>(pstate)->index;
|
||||
++recursion_stack_position;
|
||||
//BOOST_ASSERT(recursion_stack[recursion_stack_position-1].id);
|
||||
recursion_stack.back().idx = static_cast<const re_brace*>(pstate)->index;
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -927,14 +926,14 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_endmark()
|
||||
{
|
||||
m_presult->set_second(position, index);
|
||||
}
|
||||
if(recursion_stack_position)
|
||||
if(!recursion_stack.empty())
|
||||
{
|
||||
if(index == recursion_stack[recursion_stack_position-1].id)
|
||||
if(index == recursion_stack.back().idx)
|
||||
{
|
||||
--recursion_stack_position;
|
||||
pstate = recursion_stack[recursion_stack_position].preturn_address;
|
||||
*m_presult = recursion_stack[recursion_stack_position].results;
|
||||
push_recursion(recursion_stack[recursion_stack_position].id, recursion_stack[recursion_stack_position].preturn_address, &recursion_stack[recursion_stack_position].results);
|
||||
pstate = recursion_stack.back().preturn_address;
|
||||
*m_presult = recursion_stack.back().results;
|
||||
push_recursion(recursion_stack.back().idx, recursion_stack.back().preturn_address, &recursion_stack.back().results);
|
||||
recursion_stack.pop_back();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -951,13 +950,13 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_endmark()
|
||||
template <class BidiIterator, class Allocator, class traits>
|
||||
bool perl_matcher<BidiIterator, Allocator, traits>::match_match()
|
||||
{
|
||||
if(recursion_stack_position)
|
||||
if(!recursion_stack.empty())
|
||||
{
|
||||
BOOST_ASSERT(0 == recursion_stack[recursion_stack_position-1].id);
|
||||
--recursion_stack_position;
|
||||
pstate = recursion_stack[recursion_stack_position].preturn_address;
|
||||
*m_presult = recursion_stack[recursion_stack_position].results;
|
||||
push_recursion(recursion_stack[recursion_stack_position].id, recursion_stack[recursion_stack_position].preturn_address, &recursion_stack[recursion_stack_position].results);
|
||||
BOOST_ASSERT(0 == recursion_stack.back().idx);
|
||||
pstate = recursion_stack.back().preturn_address;
|
||||
*m_presult = recursion_stack.back().results;
|
||||
push_recursion(recursion_stack.back().idx, recursion_stack.back().preturn_address, &recursion_stack.back().results);
|
||||
recursion_stack.pop_back();
|
||||
return true;
|
||||
}
|
||||
if((m_match_flags & match_not_null) && (position == (*m_presult)[0].first))
|
||||
@ -1523,10 +1522,10 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion(bool r)
|
||||
saved_recursion<results_type>* pmp = static_cast<saved_recursion<results_type>*>(m_backup_state);
|
||||
if(!r)
|
||||
{
|
||||
recursion_stack[recursion_stack_position].id = pmp->recursion_id;
|
||||
recursion_stack[recursion_stack_position].preturn_address = pmp->preturn_address;
|
||||
recursion_stack[recursion_stack_position].results = pmp->results;
|
||||
++recursion_stack_position;
|
||||
recursion_stack.push_back(recursion_info<results_type>());
|
||||
recursion_stack.back().idx = pmp->recursion_id;
|
||||
recursion_stack.back().preturn_address = pmp->preturn_address;
|
||||
recursion_stack.back().results = pmp->results;
|
||||
}
|
||||
boost::re_detail::inplace_destroy(pmp++);
|
||||
m_backup_state = pmp;
|
||||
@ -1539,7 +1538,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion_pop(bool r)
|
||||
saved_state* pmp = static_cast<saved_state*>(m_backup_state);
|
||||
if(!r)
|
||||
{
|
||||
--recursion_stack_position;
|
||||
recursion_stack.pop_back();
|
||||
}
|
||||
boost::re_detail::inplace_destroy(pmp++);
|
||||
m_backup_state = pmp;
|
||||
|
@ -857,16 +857,16 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_recursion()
|
||||
//
|
||||
// Set new call stack:
|
||||
//
|
||||
if(recursion_stack_position >= static_cast<int>(sizeof(recursion_stack)/sizeof(recursion_stack[0])))
|
||||
if(recursion_stack.capacity() == 0)
|
||||
{
|
||||
return false;
|
||||
recursion_stack.reserve(50);
|
||||
}
|
||||
recursion_stack[recursion_stack_position].preturn_address = pstate->next.p;
|
||||
recursion_stack[recursion_stack_position].results = *m_presult;
|
||||
recursion_stack[recursion_stack_position].repeater_stack = next_count;
|
||||
recursion_stack.push_back(recursion_info<results_type>());
|
||||
recursion_stack.back().preturn_address = pstate->next.p;
|
||||
recursion_stack.back().results = *m_presult;
|
||||
recursion_stack.back().repeater_stack = next_count;
|
||||
pstate = static_cast<const re_jump*>(pstate)->alt.p;
|
||||
recursion_stack[recursion_stack_position].id = static_cast<const re_brace*>(pstate)->index;
|
||||
++recursion_stack_position;
|
||||
recursion_stack.back().idx = static_cast<const re_brace*>(pstate)->index;
|
||||
|
||||
repeater_count<BidiIterator>* saved = next_count;
|
||||
repeater_count<BidiIterator> r(&next_count); // resets all repeat counts since we're recursing and starting fresh on those
|
||||
@ -876,9 +876,9 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_recursion()
|
||||
|
||||
if(!result)
|
||||
{
|
||||
--recursion_stack_position;
|
||||
next_count = recursion_stack[recursion_stack_position].repeater_stack;
|
||||
*m_presult = recursion_stack[recursion_stack_position].results;
|
||||
next_count = recursion_stack.back().repeater_stack;
|
||||
*m_presult = recursion_stack.back().results;
|
||||
recursion_stack.pop_back();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@ -895,20 +895,19 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_endmark()
|
||||
{
|
||||
m_presult->set_second(position, index);
|
||||
}
|
||||
if(recursion_stack_position)
|
||||
if(!recursion_stack.empty())
|
||||
{
|
||||
if(index == recursion_stack[recursion_stack_position-1].id)
|
||||
if(index == recursion_stack.back().idx)
|
||||
{
|
||||
--recursion_stack_position;
|
||||
recursion_info<results_type> saved = recursion_stack[recursion_stack_position];
|
||||
recursion_info<results_type> saved = recursion_stack.back();
|
||||
recursion_stack.pop_back();
|
||||
const re_syntax_base* saved_state = pstate = saved.preturn_address;
|
||||
repeater_count<BidiIterator>* saved_count = next_count;
|
||||
next_count = saved.repeater_stack;
|
||||
*m_presult = saved.results;
|
||||
if(!match_all_states())
|
||||
{
|
||||
recursion_stack[recursion_stack_position] = saved;
|
||||
++recursion_stack_position;
|
||||
recursion_stack.push_back(saved);
|
||||
next_count = saved_count;
|
||||
return false;
|
||||
}
|
||||
@ -928,17 +927,17 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_endmark()
|
||||
template <class BidiIterator, class Allocator, class traits>
|
||||
bool perl_matcher<BidiIterator, Allocator, traits>::match_match()
|
||||
{
|
||||
if(recursion_stack_position)
|
||||
if(!recursion_stack.empty())
|
||||
{
|
||||
BOOST_ASSERT(0 == recursion_stack[recursion_stack_position-1].id);
|
||||
--recursion_stack_position;
|
||||
const re_syntax_base* saved_state = pstate = recursion_stack[recursion_stack_position].preturn_address;
|
||||
*m_presult = recursion_stack[recursion_stack_position].results;
|
||||
BOOST_ASSERT(0 == recursion_stack.back().idx);
|
||||
const re_syntax_base* saved_state = pstate = recursion_stack.back().preturn_address;
|
||||
*m_presult = recursion_stack.back().results;
|
||||
recursion_stack.pop_back();
|
||||
if(!match_all_states())
|
||||
{
|
||||
recursion_stack[recursion_stack_position].preturn_address = saved_state;
|
||||
recursion_stack[recursion_stack_position].results = *m_presult;
|
||||
++recursion_stack_position;
|
||||
recursion_stack.push_back(recursion_info<results_type>());
|
||||
recursion_stack.back().preturn_address = saved_state;
|
||||
recursion_stack.back().results = *m_presult;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -34,6 +34,7 @@
|
||||
#ifndef BOOST_NO_SFINAE
|
||||
#include <boost/mpl/has_xxx.hpp>
|
||||
#endif
|
||||
#include <boost/ref.hpp>
|
||||
|
||||
namespace boost{
|
||||
|
||||
@ -334,7 +335,7 @@ void basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::format
|
||||
m_position = --base;
|
||||
}
|
||||
}
|
||||
put((this->m_results)[this->m_results.size() > 1 ? this->m_results.size() - 1 : 1]);
|
||||
put((this->m_results)[this->m_results.size() > 1 ? static_cast<int>(this->m_results.size() - 1) : 1]);
|
||||
break;
|
||||
case '{':
|
||||
have_brace = true;
|
||||
@ -384,7 +385,7 @@ bool basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::handle
|
||||
if(have_brace && (*m_position == '^'))
|
||||
++m_position;
|
||||
|
||||
int max_len = m_end - m_position;
|
||||
std::ptrdiff_t max_len = m_end - m_position;
|
||||
|
||||
if((max_len >= 5) && std::equal(m_position, m_position + 5, MATCH))
|
||||
{
|
||||
@ -447,7 +448,7 @@ bool basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::handle
|
||||
return false;
|
||||
}
|
||||
}
|
||||
put((this->m_results)[this->m_results.size() > 1 ? this->m_results.size() - 1 : 1]);
|
||||
put((this->m_results)[this->m_results.size() > 1 ? static_cast<int>(this->m_results.size() - 1) : 1]);
|
||||
return true;
|
||||
}
|
||||
if((max_len >= 20) && std::equal(m_position, m_position + 20, LAST_SUBMATCH_RESULT))
|
||||
@ -895,7 +896,7 @@ private:
|
||||
// F must be a pointer, a function, or a class with a function call operator:
|
||||
//
|
||||
BOOST_STATIC_ASSERT((::boost::is_pointer<F>::value || ::boost::is_function<F>::value || ::boost::is_class<F>::value));
|
||||
static formatter_wrapper<F> f;
|
||||
static formatter_wrapper<typename unwrap_reference<F>::type> f;
|
||||
static M m;
|
||||
static O out;
|
||||
static boost::regex_constants::match_flag_type flags;
|
||||
@ -963,7 +964,7 @@ struct format_functor3
|
||||
template <class OutputIter>
|
||||
OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f)
|
||||
{
|
||||
return func(m, i, f);
|
||||
return boost::unwrap_ref(func)(m, i, f);
|
||||
}
|
||||
template <class OutputIter, class Traits>
|
||||
OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f, const Traits&)
|
||||
@ -983,7 +984,7 @@ struct format_functor2
|
||||
template <class OutputIter>
|
||||
OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type /*f*/)
|
||||
{
|
||||
return func(m, i);
|
||||
return boost::unwrap_ref(func)(m, i);
|
||||
}
|
||||
template <class OutputIter, class Traits>
|
||||
OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f, const Traits&)
|
||||
@ -1020,7 +1021,7 @@ struct format_functor1
|
||||
template <class OutputIter>
|
||||
OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type /*f*/)
|
||||
{
|
||||
return do_format_string(func(m), i);
|
||||
return do_format_string(boost::unwrap_ref(func)(m), i);
|
||||
}
|
||||
template <class OutputIter, class Traits>
|
||||
OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f, const Traits&)
|
||||
|
@ -149,7 +149,37 @@ namespace boost{ namespace re_detail{
|
||||
{
|
||||
return stdext::unchecked_equal(first, last, with);
|
||||
}
|
||||
|
||||
#elif BOOST_WORKAROUND(BOOST_MSVC, > 1500)
|
||||
//
|
||||
// MSVC 10 will either emit warnings or else refuse to compile
|
||||
// code that makes perfectly legitimate use of std::copy, when
|
||||
// the OutputIterator type is a user-defined class (apparently all user
|
||||
// defined iterators are "unsafe"). What's more Microsoft have removed their
|
||||
// non-standard "unchecked" versions, even though their still in the MS
|
||||
// documentation!! Work around this as best we can:
|
||||
//
|
||||
template<class InputIterator, class OutputIterator>
|
||||
inline OutputIterator copy(
|
||||
InputIterator first,
|
||||
InputIterator last,
|
||||
OutputIterator dest
|
||||
)
|
||||
{
|
||||
while(first != last)
|
||||
*dest++ = *first++;
|
||||
return dest;
|
||||
}
|
||||
template<class InputIterator1, class InputIterator2>
|
||||
inline bool equal(
|
||||
InputIterator1 first,
|
||||
InputIterator1 last,
|
||||
InputIterator2 with
|
||||
)
|
||||
{
|
||||
while(first != last)
|
||||
if(*first++ != *with++) return false;
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
using std::copy;
|
||||
using std::equal;
|
||||
|
@ -292,7 +292,7 @@ template <class charT, class Traits, class Alloc>
|
||||
inline u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_token_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
|
||||
{
|
||||
typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;
|
||||
return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, m);
|
||||
return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, submatch, m);
|
||||
}
|
||||
inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
|
||||
{
|
||||
|
@ -100,6 +100,9 @@ int handle_argument(const std::string& what)
|
||||
#endif
|
||||
#ifdef BOOST_HAS_PCRE
|
||||
time_pcre = true;
|
||||
#endif
|
||||
#ifdef BOOST_HAS_XPRESSIVE
|
||||
time_xpressive = true;
|
||||
#endif
|
||||
}
|
||||
else if(what == "-test-matches")
|
||||
|
@ -155,16 +155,16 @@ c_regex_traits<char>::char_class_type BOOST_REGEX_CALL c_regex_traits<char>::loo
|
||||
char_class_xdigit,
|
||||
};
|
||||
|
||||
int id = ::boost::re_detail::get_default_class_id(p1, p2);
|
||||
if(id < 0)
|
||||
int idx = ::boost::re_detail::get_default_class_id(p1, p2);
|
||||
if(idx < 0)
|
||||
{
|
||||
std::string s(p1, p2);
|
||||
for(std::string::size_type i = 0; i < s.size(); ++i)
|
||||
s[i] = static_cast<char>((std::tolower)(static_cast<unsigned char>(s[i])));
|
||||
id = ::boost::re_detail::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
|
||||
idx = ::boost::re_detail::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
|
||||
}
|
||||
BOOST_ASSERT(std::size_t(id+1) < sizeof(masks) / sizeof(masks[0]));
|
||||
return masks[id+1];
|
||||
BOOST_ASSERT(std::size_t(idx+1) < sizeof(masks) / sizeof(masks[0]));
|
||||
return masks[idx+1];
|
||||
}
|
||||
|
||||
bool BOOST_REGEX_CALL c_regex_traits<char>::isctype(char c, char_class_type mask)
|
||||
|
18
src/icu.cpp
18
src/icu.cpp
@ -388,14 +388,14 @@ icu_regex_traits::char_class_type icu_regex_traits::lookup_classname(const char_
|
||||
char_class_type(U_GC_ND_MASK) | mask_xdigit,
|
||||
};
|
||||
|
||||
int id = ::boost::re_detail::get_default_class_id(p1, p2);
|
||||
if(id >= 0)
|
||||
return masks[id+1];
|
||||
int idx = ::boost::re_detail::get_default_class_id(p1, p2);
|
||||
if(idx >= 0)
|
||||
return masks[idx+1];
|
||||
char_class_type result = lookup_icu_mask(p1, p2);
|
||||
if(result != 0)
|
||||
return result;
|
||||
|
||||
if(id < 0)
|
||||
if(idx < 0)
|
||||
{
|
||||
string_type s(p1, p2);
|
||||
string_type::size_type i = 0;
|
||||
@ -411,16 +411,16 @@ icu_regex_traits::char_class_type icu_regex_traits::lookup_classname(const char_
|
||||
}
|
||||
}
|
||||
if(s.size())
|
||||
id = ::boost::re_detail::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
|
||||
if(id >= 0)
|
||||
return masks[id+1];
|
||||
idx = ::boost::re_detail::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
|
||||
if(idx >= 0)
|
||||
return masks[idx+1];
|
||||
if(s.size())
|
||||
result = lookup_icu_mask(&*s.begin(), &*s.begin() + s.size());
|
||||
if(result != 0)
|
||||
return result;
|
||||
}
|
||||
BOOST_ASSERT(std::size_t(id+1) < sizeof(masks) / sizeof(masks[0]));
|
||||
return masks[id+1];
|
||||
BOOST_ASSERT(std::size_t(idx+1) < sizeof(masks) / sizeof(masks[0]));
|
||||
return masks[idx+1];
|
||||
}
|
||||
|
||||
icu_regex_traits::string_type icu_regex_traits::lookup_collatename(const char_type* p1, const char_type* p2) const
|
||||
|
@ -43,10 +43,10 @@ namespace std{
|
||||
namespace boost{ namespace re_detail{
|
||||
|
||||
#ifdef BOOST_NO_ANSI_APIS
|
||||
UINT get_code_page_for_locale_id(lcid_type id)
|
||||
UINT get_code_page_for_locale_id(lcid_type idx)
|
||||
{
|
||||
WCHAR code_page_string[7];
|
||||
if (::GetLocaleInfoW(id, LOCALE_IDEFAULTANSICODEPAGE, code_page_string, 7) == 0)
|
||||
if (::GetLocaleInfoW(idx, LOCALE_IDEFAULTANSICODEPAGE, code_page_string, 7) == 0)
|
||||
return 0;
|
||||
|
||||
return static_cast<UINT>(_wtol(code_page_string));
|
||||
@ -157,15 +157,15 @@ BOOST_REGEX_DECL lcid_type BOOST_REGEX_CALL w32_get_default_locale()
|
||||
return ::GetUserDefaultLCID();
|
||||
}
|
||||
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(char c, lcid_type id)
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(char c, lcid_type idx)
|
||||
{
|
||||
#ifndef BOOST_NO_ANSI_APIS
|
||||
WORD mask;
|
||||
if(::GetStringTypeExA(id, CT_CTYPE1, &c, 1, &mask) && (mask & C1_LOWER))
|
||||
if(::GetStringTypeExA(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_LOWER))
|
||||
return true;
|
||||
return false;
|
||||
#else
|
||||
UINT code_page = get_code_page_for_locale_id(id);
|
||||
UINT code_page = get_code_page_for_locale_id(idx);
|
||||
if (code_page == 0)
|
||||
return false;
|
||||
|
||||
@ -174,39 +174,39 @@ BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(char c, lcid_type id)
|
||||
return false;
|
||||
|
||||
WORD mask;
|
||||
if(::GetStringTypeExW(id, CT_CTYPE1, &wide_c, 1, &mask) && (mask & C1_LOWER))
|
||||
if(::GetStringTypeExW(idx, CT_CTYPE1, &wide_c, 1, &mask) && (mask & C1_LOWER))
|
||||
return true;
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(wchar_t c, lcid_type id)
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(wchar_t c, lcid_type idx)
|
||||
{
|
||||
WORD mask;
|
||||
if(::GetStringTypeExW(id, CT_CTYPE1, &c, 1, &mask) && (mask & C1_LOWER))
|
||||
if(::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_LOWER))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(unsigned short ca, lcid_type id)
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(unsigned short ca, lcid_type idx)
|
||||
{
|
||||
WORD mask;
|
||||
wchar_t c = ca;
|
||||
if(::GetStringTypeExW(id, CT_CTYPE1, &c, 1, &mask) && (mask & C1_LOWER))
|
||||
if(::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_LOWER))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(char c, lcid_type id)
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(char c, lcid_type idx)
|
||||
{
|
||||
#ifndef BOOST_NO_ANSI_APIS
|
||||
WORD mask;
|
||||
if(::GetStringTypeExA(id, CT_CTYPE1, &c, 1, &mask) && (mask & C1_UPPER))
|
||||
if(::GetStringTypeExA(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_UPPER))
|
||||
return true;
|
||||
return false;
|
||||
#else
|
||||
UINT code_page = get_code_page_for_locale_id(id);
|
||||
UINT code_page = get_code_page_for_locale_id(idx);
|
||||
if (code_page == 0)
|
||||
return false;
|
||||
|
||||
@ -215,25 +215,25 @@ BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(char c, lcid_type id)
|
||||
return false;
|
||||
|
||||
WORD mask;
|
||||
if(::GetStringTypeExW(id, CT_CTYPE1, &wide_c, 1, &mask) && (mask & C1_UPPER))
|
||||
if(::GetStringTypeExW(idx, CT_CTYPE1, &wide_c, 1, &mask) && (mask & C1_UPPER))
|
||||
return true;
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(wchar_t c, lcid_type id)
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(wchar_t c, lcid_type idx)
|
||||
{
|
||||
WORD mask;
|
||||
if(::GetStringTypeExW(id, CT_CTYPE1, &c, 1, &mask) && (mask & C1_UPPER))
|
||||
if(::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_UPPER))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(unsigned short ca, lcid_type id)
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(unsigned short ca, lcid_type idx)
|
||||
{
|
||||
WORD mask;
|
||||
wchar_t c = ca;
|
||||
if(::GetStringTypeExW(id, CT_CTYPE1, &c, 1, &mask) && (mask & C1_UPPER))
|
||||
if(::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_UPPER))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
@ -322,11 +322,11 @@ BOOST_REGEX_DECL std::basic_string<unsigned short> BOOST_REGEX_CALL w32_cat_get(
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_transform(lcid_type id, const char* p1, const char* p2)
|
||||
BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_transform(lcid_type idx, const char* p1, const char* p2)
|
||||
{
|
||||
#ifndef BOOST_NO_ANSI_APIS
|
||||
int bytes = ::LCMapStringA(
|
||||
id, // locale identifier
|
||||
idx, // locale identifier
|
||||
LCMAP_SORTKEY, // mapping transformation type
|
||||
p1, // source string
|
||||
static_cast<int>(p2 - p1), // number of characters in source string
|
||||
@ -337,7 +337,7 @@ BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_transform(lcid_type id, const
|
||||
return std::string(p1, p2);
|
||||
std::string result(++bytes, '\0');
|
||||
bytes = ::LCMapStringA(
|
||||
id, // locale identifier
|
||||
idx, // locale identifier
|
||||
LCMAP_SORTKEY, // mapping transformation type
|
||||
p1, // source string
|
||||
static_cast<int>(p2 - p1), // number of characters in source string
|
||||
@ -345,7 +345,7 @@ BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_transform(lcid_type id, const
|
||||
bytes // size of destination buffer
|
||||
);
|
||||
#else
|
||||
UINT code_page = get_code_page_for_locale_id(id);
|
||||
UINT code_page = get_code_page_for_locale_id(idx);
|
||||
if(code_page == 0)
|
||||
return std::string(p1, p2);
|
||||
|
||||
@ -355,7 +355,7 @@ BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_transform(lcid_type id, const
|
||||
return std::string(p1, p2);
|
||||
|
||||
int bytes = ::LCMapStringW(
|
||||
id, // locale identifier
|
||||
idx, // locale identifier
|
||||
LCMAP_SORTKEY, // mapping transformation type
|
||||
wide_p1, // source string
|
||||
src_len, // number of characters in source string
|
||||
@ -366,7 +366,7 @@ BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_transform(lcid_type id, const
|
||||
return std::string(p1, p2);
|
||||
std::string result(++bytes, '\0');
|
||||
bytes = ::LCMapStringW(
|
||||
id, // locale identifier
|
||||
idx, // locale identifier
|
||||
LCMAP_SORTKEY, // mapping transformation type
|
||||
wide_p1, // source string
|
||||
src_len, // number of characters in source string
|
||||
@ -384,10 +384,10 @@ BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_transform(lcid_type id, const
|
||||
}
|
||||
|
||||
#ifndef BOOST_NO_WREGEX
|
||||
BOOST_REGEX_DECL std::wstring BOOST_REGEX_CALL w32_transform(lcid_type id, const wchar_t* p1, const wchar_t* p2)
|
||||
BOOST_REGEX_DECL std::wstring BOOST_REGEX_CALL w32_transform(lcid_type idx, const wchar_t* p1, const wchar_t* p2)
|
||||
{
|
||||
int bytes = ::LCMapStringW(
|
||||
id, // locale identifier
|
||||
idx, // locale identifier
|
||||
LCMAP_SORTKEY, // mapping transformation type
|
||||
p1, // source string
|
||||
static_cast<int>(p2 - p1), // number of characters in source string
|
||||
@ -398,7 +398,7 @@ BOOST_REGEX_DECL std::wstring BOOST_REGEX_CALL w32_transform(lcid_type id, const
|
||||
return std::wstring(p1, p2);
|
||||
std::string result(++bytes, '\0');
|
||||
bytes = ::LCMapStringW(
|
||||
id, // locale identifier
|
||||
idx, // locale identifier
|
||||
LCMAP_SORTKEY, // mapping transformation type
|
||||
p1, // source string
|
||||
static_cast<int>(p2 - p1), // number of characters in source string
|
||||
@ -417,10 +417,10 @@ BOOST_REGEX_DECL std::wstring BOOST_REGEX_CALL w32_transform(lcid_type id, const
|
||||
return r2;
|
||||
}
|
||||
#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
|
||||
BOOST_REGEX_DECL std::basic_string<unsigned short> BOOST_REGEX_CALL w32_transform(lcid_type id, const unsigned short* p1, const unsigned short* p2)
|
||||
BOOST_REGEX_DECL std::basic_string<unsigned short> BOOST_REGEX_CALL w32_transform(lcid_type idx, const unsigned short* p1, const unsigned short* p2)
|
||||
{
|
||||
int bytes = ::LCMapStringW(
|
||||
id, // locale identifier
|
||||
idx, // locale identifier
|
||||
LCMAP_SORTKEY, // mapping transformation type
|
||||
(LPCWSTR)p1, // source string
|
||||
static_cast<int>(p2 - p1), // number of characters in source string
|
||||
@ -431,7 +431,7 @@ BOOST_REGEX_DECL std::basic_string<unsigned short> BOOST_REGEX_CALL w32_transfor
|
||||
return std::basic_string<unsigned short>(p1, p2);
|
||||
std::string result(++bytes, '\0');
|
||||
bytes = ::LCMapStringW(
|
||||
id, // locale identifier
|
||||
idx, // locale identifier
|
||||
LCMAP_SORTKEY, // mapping transformation type
|
||||
(LPCWSTR)p1, // source string
|
||||
static_cast<int>(p2 - p1), // number of characters in source string
|
||||
@ -451,12 +451,12 @@ BOOST_REGEX_DECL std::basic_string<unsigned short> BOOST_REGEX_CALL w32_transfor
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_tolower(char c, lcid_type id)
|
||||
BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_tolower(char c, lcid_type idx)
|
||||
{
|
||||
char result[2];
|
||||
#ifndef BOOST_NO_ANSI_APIS
|
||||
int b = ::LCMapStringA(
|
||||
id, // locale identifier
|
||||
idx, // locale identifier
|
||||
LCMAP_LOWERCASE, // mapping transformation type
|
||||
&c, // source string
|
||||
1, // number of characters in source string
|
||||
@ -465,7 +465,7 @@ BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_tolower(char c, lcid_type id)
|
||||
if(b == 0)
|
||||
return c;
|
||||
#else
|
||||
UINT code_page = get_code_page_for_locale_id(id);
|
||||
UINT code_page = get_code_page_for_locale_id(idx);
|
||||
if (code_page == 0)
|
||||
return c;
|
||||
|
||||
@ -475,7 +475,7 @@ BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_tolower(char c, lcid_type id)
|
||||
|
||||
WCHAR wide_result;
|
||||
int b = ::LCMapStringW(
|
||||
id, // locale identifier
|
||||
idx, // locale identifier
|
||||
LCMAP_LOWERCASE, // mapping transformation type
|
||||
&wide_c, // source string
|
||||
1, // number of characters in source string
|
||||
@ -491,11 +491,11 @@ BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_tolower(char c, lcid_type id)
|
||||
}
|
||||
|
||||
#ifndef BOOST_NO_WREGEX
|
||||
BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL w32_tolower(wchar_t c, lcid_type id)
|
||||
BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL w32_tolower(wchar_t c, lcid_type idx)
|
||||
{
|
||||
wchar_t result[2];
|
||||
int b = ::LCMapStringW(
|
||||
id, // locale identifier
|
||||
idx, // locale identifier
|
||||
LCMAP_LOWERCASE, // mapping transformation type
|
||||
&c, // source string
|
||||
1, // number of characters in source string
|
||||
@ -506,11 +506,11 @@ BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL w32_tolower(wchar_t c, lcid_type id)
|
||||
return result[0];
|
||||
}
|
||||
#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
|
||||
BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL w32_tolower(unsigned short c, lcid_type id)
|
||||
BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL w32_tolower(unsigned short c, lcid_type idx)
|
||||
{
|
||||
wchar_t result[2];
|
||||
int b = ::LCMapStringW(
|
||||
id, // locale identifier
|
||||
idx, // locale identifier
|
||||
LCMAP_LOWERCASE, // mapping transformation type
|
||||
(wchar_t const*)&c, // source string
|
||||
1, // number of characters in source string
|
||||
@ -522,12 +522,12 @@ BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL w32_tolower(unsigned short c, l
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_toupper(char c, lcid_type id)
|
||||
BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_toupper(char c, lcid_type idx)
|
||||
{
|
||||
char result[2];
|
||||
#ifndef BOOST_NO_ANSI_APIS
|
||||
int b = ::LCMapStringA(
|
||||
id, // locale identifier
|
||||
idx, // locale identifier
|
||||
LCMAP_UPPERCASE, // mapping transformation type
|
||||
&c, // source string
|
||||
1, // number of characters in source string
|
||||
@ -536,7 +536,7 @@ BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_toupper(char c, lcid_type id)
|
||||
if(b == 0)
|
||||
return c;
|
||||
#else
|
||||
UINT code_page = get_code_page_for_locale_id(id);
|
||||
UINT code_page = get_code_page_for_locale_id(idx);
|
||||
if(code_page == 0)
|
||||
return c;
|
||||
|
||||
@ -546,7 +546,7 @@ BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_toupper(char c, lcid_type id)
|
||||
|
||||
WCHAR wide_result;
|
||||
int b = ::LCMapStringW(
|
||||
id, // locale identifier
|
||||
idx, // locale identifier
|
||||
LCMAP_UPPERCASE, // mapping transformation type
|
||||
&wide_c, // source string
|
||||
1, // number of characters in source string
|
||||
@ -562,11 +562,11 @@ BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_toupper(char c, lcid_type id)
|
||||
}
|
||||
|
||||
#ifndef BOOST_NO_WREGEX
|
||||
BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL w32_toupper(wchar_t c, lcid_type id)
|
||||
BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL w32_toupper(wchar_t c, lcid_type idx)
|
||||
{
|
||||
wchar_t result[2];
|
||||
int b = ::LCMapStringW(
|
||||
id, // locale identifier
|
||||
idx, // locale identifier
|
||||
LCMAP_UPPERCASE, // mapping transformation type
|
||||
&c, // source string
|
||||
1, // number of characters in source string
|
||||
@ -577,11 +577,11 @@ BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL w32_toupper(wchar_t c, lcid_type id)
|
||||
return result[0];
|
||||
}
|
||||
#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
|
||||
BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL w32_toupper(unsigned short c, lcid_type id)
|
||||
BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL w32_toupper(unsigned short c, lcid_type idx)
|
||||
{
|
||||
wchar_t result[2];
|
||||
int b = ::LCMapStringW(
|
||||
id, // locale identifier
|
||||
idx, // locale identifier
|
||||
LCMAP_UPPERCASE, // mapping transformation type
|
||||
(wchar_t const*)&c, // source string
|
||||
1, // number of characters in source string
|
||||
@ -593,14 +593,14 @@ BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL w32_toupper(unsigned short c, l
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type id, boost::uint32_t m, char c)
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type idx, boost::uint32_t m, char c)
|
||||
{
|
||||
WORD mask;
|
||||
#ifndef BOOST_NO_ANSI_APIS
|
||||
if(::GetStringTypeExA(id, CT_CTYPE1, &c, 1, &mask) && (mask & m & w32_regex_traits_implementation<char>::mask_base))
|
||||
if(::GetStringTypeExA(idx, CT_CTYPE1, &c, 1, &mask) && (mask & m & w32_regex_traits_implementation<char>::mask_base))
|
||||
return true;
|
||||
#else
|
||||
UINT code_page = get_code_page_for_locale_id(id);
|
||||
UINT code_page = get_code_page_for_locale_id(idx);
|
||||
if(code_page == 0)
|
||||
return false;
|
||||
|
||||
@ -608,7 +608,7 @@ BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type id, boost::uint32_t m, c
|
||||
if (::MultiByteToWideChar(code_page, 0, &c, 1, &wide_c, 1) == 0)
|
||||
return false;
|
||||
|
||||
if(::GetStringTypeExW(id, CT_CTYPE1, &wide_c, 1, &mask) && (mask & m & w32_regex_traits_implementation<char>::mask_base))
|
||||
if(::GetStringTypeExW(idx, CT_CTYPE1, &wide_c, 1, &mask) && (mask & m & w32_regex_traits_implementation<char>::mask_base))
|
||||
return true;
|
||||
#endif
|
||||
if((m & w32_regex_traits_implementation<char>::mask_word) && (c == '_'))
|
||||
@ -617,10 +617,10 @@ BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type id, boost::uint32_t m, c
|
||||
}
|
||||
|
||||
#ifndef BOOST_NO_WREGEX
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type id, boost::uint32_t m, wchar_t c)
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type idx, boost::uint32_t m, wchar_t c)
|
||||
{
|
||||
WORD mask;
|
||||
if(::GetStringTypeExW(id, CT_CTYPE1, &c, 1, &mask) && (mask & m & w32_regex_traits_implementation<wchar_t>::mask_base))
|
||||
if(::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & m & w32_regex_traits_implementation<wchar_t>::mask_base))
|
||||
return true;
|
||||
if((m & w32_regex_traits_implementation<wchar_t>::mask_word) && (c == '_'))
|
||||
return true;
|
||||
@ -629,10 +629,10 @@ BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type id, boost::uint32_t m, w
|
||||
return false;
|
||||
}
|
||||
#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type id, boost::uint32_t m, unsigned short c)
|
||||
BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type idx, boost::uint32_t m, unsigned short c)
|
||||
{
|
||||
WORD mask;
|
||||
if(::GetStringTypeExW(id, CT_CTYPE1, (wchar_t const*)&c, 1, &mask) && (mask & m & w32_regex_traits_implementation<wchar_t>::mask_base))
|
||||
if(::GetStringTypeExW(idx, CT_CTYPE1, (wchar_t const*)&c, 1, &mask) && (mask & m & w32_regex_traits_implementation<wchar_t>::mask_base))
|
||||
return true;
|
||||
if((m & w32_regex_traits_implementation<wchar_t>::mask_word) && (c == '_'))
|
||||
return true;
|
||||
|
@ -195,16 +195,16 @@ c_regex_traits<wchar_t>::char_class_type BOOST_REGEX_CALL c_regex_traits<wchar_t
|
||||
char_class_xdigit,
|
||||
};
|
||||
|
||||
int id = ::boost::re_detail::get_default_class_id(p1, p2);
|
||||
if(id < 0)
|
||||
int idx = ::boost::re_detail::get_default_class_id(p1, p2);
|
||||
if(idx < 0)
|
||||
{
|
||||
std::wstring s(p1, p2);
|
||||
for(std::wstring::size_type i = 0; i < s.size(); ++i)
|
||||
s[i] = (std::towlower)(s[i]);
|
||||
id = ::boost::re_detail::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
|
||||
idx = ::boost::re_detail::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
|
||||
}
|
||||
BOOST_ASSERT(id+1 < static_cast<int>(sizeof(masks) / sizeof(masks[0])));
|
||||
return masks[id+1];
|
||||
BOOST_ASSERT(idx+1 < static_cast<int>(sizeof(masks) / sizeof(masks[0])));
|
||||
return masks[idx+1];
|
||||
}
|
||||
|
||||
bool BOOST_REGEX_CALL c_regex_traits<wchar_t>::isctype(wchar_t c, char_class_type mask)
|
||||
|
@ -9,9 +9,15 @@ project
|
||||
<link>shared:<define>BOOST_REGEX_DYN_LINK=1
|
||||
<toolset>msvc-7.1:<define>TEST_MFC=1
|
||||
<toolset>msvc-7.0:<define>TEST_MFC=1
|
||||
<toolset>msvc:<asynch-exceptions>on
|
||||
# There are unidentified linker problems on these platforms:
|
||||
<toolset>mipspro-7.4:<link>static
|
||||
<toolset>sun-5.9:<link>static
|
||||
<toolset>msvc:<warnings>all
|
||||
<toolset>gcc:<warnings>all
|
||||
<toolset>gcc:<cxxflags>-Wextra
|
||||
<toolset>gcc:<cxxflags>-Wshadow
|
||||
<define>U_USING_ICU_NAMESPACE=0
|
||||
;
|
||||
|
||||
#
|
||||
@ -135,4 +141,4 @@ test-suite regex
|
||||
]
|
||||
;
|
||||
|
||||
|
||||
build-project ../example ;
|
||||
|
@ -35,7 +35,7 @@ int main()
|
||||
regex_tA re;
|
||||
int result;
|
||||
result = regcompA(&re, expression, REG_AWK);
|
||||
if(result > REG_NOERROR)
|
||||
if(result > (int)REG_NOERROR)
|
||||
{
|
||||
char buf[256];
|
||||
regerrorA(result, &re, buf, sizeof(buf));
|
||||
@ -46,7 +46,7 @@ int main()
|
||||
matches[0].rm_so = 0;
|
||||
matches[0].rm_eo = strlen(text);
|
||||
result = regexecA(&re, text, 1, matches, REG_NOTBOL | REG_NOTEOL | REG_STARTEND);
|
||||
if(result > REG_NOERROR)
|
||||
if(result > (int)REG_NOERROR)
|
||||
{
|
||||
char buf[256];
|
||||
regerrorA(result, &re, buf, sizeof(buf));
|
||||
@ -54,7 +54,7 @@ int main()
|
||||
regfreeA(&re);
|
||||
return result;
|
||||
}
|
||||
assert(matches[0].rm_so == matches[0].rm_eo == 1);
|
||||
assert((matches[0].rm_so == matches[0].rm_eo) && (matches[0].rm_eo == 1));
|
||||
regfreeA(&re);
|
||||
printf("no errors found\n");
|
||||
return 0;
|
||||
|
@ -45,11 +45,11 @@ int main()
|
||||
char nbuf[256];
|
||||
int i;
|
||||
result = regcomp(&re, expression, REG_AWK);
|
||||
if(result > REG_NOERROR)
|
||||
if(result > (int)REG_NOERROR)
|
||||
{
|
||||
regerror(result, &re, buf, sizeof(buf));
|
||||
for(i = 0; i < 256; ++i)
|
||||
nbuf[i] = buf[i];
|
||||
nbuf[i] = (char)(buf[i]);
|
||||
printf(nbuf);
|
||||
return result;
|
||||
}
|
||||
@ -61,11 +61,11 @@ int main()
|
||||
matches[0].rm_so = 0;
|
||||
matches[0].rm_eo = wcslen(text);
|
||||
result = regexec(&re, text, 1, matches, REG_NOTBOL | REG_NOTEOL | REG_STARTEND);
|
||||
if(result > REG_NOERROR)
|
||||
if(result > (int)REG_NOERROR)
|
||||
{
|
||||
regerror(result, &re, buf, sizeof(buf));
|
||||
for(i = 0; i < 256; ++i)
|
||||
nbuf[i] = buf[i];
|
||||
nbuf[i] = (char)(buf[i]);
|
||||
printf(nbuf);
|
||||
regfree(&re);
|
||||
return result;
|
||||
|
@ -33,9 +33,14 @@ int* get_array_data();
|
||||
|
||||
int error_count = 0;
|
||||
|
||||
#ifndef TEST_THREADS
|
||||
#define RUN_TESTS(name) \
|
||||
std::cout << "Running test case \"" #name "\".\n";\
|
||||
name();
|
||||
#else
|
||||
#define RUN_TESTS(name) \
|
||||
name();
|
||||
#endif
|
||||
|
||||
|
||||
void run_tests()
|
||||
|
@ -132,6 +132,8 @@ void test_conditionals()
|
||||
TEST_INVALID_REGEX("(?<!*|A)", perl);
|
||||
TEST_INVALID_REGEX("(?<=?|A)", perl);
|
||||
TEST_INVALID_REGEX("(?<=*|\\B)", perl);
|
||||
TEST_INVALID_REGEX("(?<!a|bc)de", perl);
|
||||
TEST_INVALID_REGEX("(?<=a|bc)de", perl);
|
||||
}
|
||||
|
||||
void test_options()
|
||||
@ -278,8 +280,8 @@ void test_options2()
|
||||
TEST_REGEX_SEARCH("(?<=^[[:alpha:]]{4})(?:bar|cat)", perl, "aaaacat", match_default, make_array(4, 7, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?<=^[[:alpha:]]{4})(?:bar|cat)", perl, "aaacat", match_default, make_array(-2, -2));
|
||||
|
||||
TEST_REGEX_SEARCH("(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "abxyZZ", match_default, make_array(4, 6, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "abXyZZ", match_default, make_array(4, 6, -2, -2));
|
||||
//TEST_REGEX_SEARCH("(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "abxyZZ", match_default, make_array(4, 6, -2, -2));
|
||||
//TEST_REGEX_SEARCH("(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "abXyZZ", match_default, make_array(4, 6, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "ZZZ", match_default, make_array(0, 3, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "zZZ", match_default, make_array(0, 3, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "bZZ", match_default, make_array(0, 3, -2, -2));
|
||||
@ -674,6 +676,15 @@ void test_mark_resets()
|
||||
TEST_REGEX_SEARCH("^X(?7)(a)(?|(b)|(q)(r)(s))(c)(d)(Y)", perl, "XYabcdY", match_default, make_array(0, 7, 2, 3, 3, 4, -1, -1, -1, -1, 4, 5, 5, 6, 6, 7, -2, -2));
|
||||
TEST_REGEX_SEARCH("^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)", perl, "XYabcdY", match_default, make_array(0, 7, 2, 3, 3, 4, -1, -1, -1, -1, 4, 5, 5, 6, 6, 7, -2, -2));
|
||||
TEST_REGEX_SEARCH("^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)", perl, "XYabcdY", match_default, make_array(0, 7, 2, 3, 3, 4, -1, -1, -1, -1, 4, 5, 5, 6, 6, 7, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?|(abc)|(?:((?:xyz)))|(123))", perl, "abc", match_default, make_array(0, 3, 0, 3, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?|(abc)|(?:)((?:)xyz)|(123))", perl, "xyz", match_default, make_array(0, 3, 0, 3, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?|(abc)|((?:(x)|(y)|(z)))|(123))", perl, "y", match_default, make_array(0, 1, 0, 1, -1, -1, 0, 1, -1, -1, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?|(abc)|((?|(x)|(y)|(z)))|(123))", perl, "y", match_default, make_array(0, 1, 0, 1, 0, 1, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?|(abc)|((?|(x)|(y)|(z)))|(123))", perl, "abc", match_default, make_array(0, 3, 0, 3, -1, -1, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?|(abc)|((?|(x)|(y)|(z)))|(123))", perl, "123", match_default, make_array(0, 3, 0, 3, -1, -1, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?|(abc)|((x)|(y)|(z))|(123))", perl, "z", match_default, make_array(0, 1, 0, 1, -1, -1, -1, -1, 0, 1, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?|(abc)|((x)|(y)|(z))|(123))", perl, "abc", match_default, make_array(0, 3, 0, 3, -1, -1, -1, -1, -1, -1, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?|(abc)|((x)|(y)|(z))|(123))", perl, "123", match_default, make_array(0, 3, 0, 3, -1, -1, -1, -1, -1, -1, -2, -2));
|
||||
}
|
||||
|
||||
void test_recursion()
|
||||
|
@ -94,7 +94,7 @@ void test(const std::vector< ::boost::uint32_t>& v)
|
||||
std::copy(u32to16type(v.begin()), u32to16type(v.end()), std::back_inserter(v16));
|
||||
#endif
|
||||
#ifndef BOOST_NO_STD_DISTANCE
|
||||
BOOST_CHECK_EQUAL(std::distance(u32to16type(v.begin()), u32to16type(v.end())), v16.size());
|
||||
BOOST_CHECK_EQUAL((std::size_t)std::distance(u32to16type(v.begin()), u32to16type(v.end())), v16.size());
|
||||
#endif
|
||||
#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
|
||||
v32.assign(u16to32type(v16.begin()), u16to32type(v16.end()));
|
||||
@ -103,7 +103,7 @@ void test(const std::vector< ::boost::uint32_t>& v)
|
||||
std::copy(u16to32type(v16.begin()), u16to32type(v16.end()), std::back_inserter(v32));
|
||||
#endif
|
||||
#ifndef BOOST_NO_STD_DISTANCE
|
||||
BOOST_CHECK_EQUAL(std::distance(u16to32type(v16.begin()), u16to32type(v16.end())), v32.size());
|
||||
BOOST_CHECK_EQUAL((std::size_t)std::distance(u16to32type(v16.begin()), u16to32type(v16.end())), v32.size());
|
||||
#endif
|
||||
BOOST_CHECK_EQUAL(v.size(), v32.size());
|
||||
i = v.begin();
|
||||
@ -117,12 +117,12 @@ void test(const std::vector< ::boost::uint32_t>& v)
|
||||
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_STD_ITERATOR) && !defined(_RWSTD_NO_CLASS_PARTIAL_SPEC)
|
||||
v16.assign(ru32to16type(u32to16type(v.end())), ru32to16type(u32to16type(v.begin())));
|
||||
#ifndef BOOST_NO_STD_DISTANCE
|
||||
BOOST_CHECK_EQUAL(std::distance(ru32to16type(u32to16type(v.end())), ru32to16type(u32to16type(v.begin()))), v16.size());
|
||||
BOOST_CHECK_EQUAL((std::size_t)std::distance(ru32to16type(u32to16type(v.end())), ru32to16type(u32to16type(v.begin()))), v16.size());
|
||||
#endif
|
||||
std::reverse(v16.begin(), v16.end());
|
||||
v32.assign(ru16to32type(u16to32type(v16.end())), ru16to32type(u16to32type(v16.begin())));
|
||||
#ifndef BOOST_NO_STD_DISTANCE
|
||||
BOOST_CHECK_EQUAL(std::distance(ru16to32type(u16to32type(v16.end())), ru16to32type(u16to32type(v16.begin()))), v32.size());
|
||||
BOOST_CHECK_EQUAL((std::size_t)std::distance(ru16to32type(u16to32type(v16.end())), ru16to32type(u16to32type(v16.begin()))), v32.size());
|
||||
#endif
|
||||
BOOST_CHECK_EQUAL(v.size(), v32.size());
|
||||
std::reverse(v32.begin(), v32.end());
|
||||
@ -142,7 +142,7 @@ void test(const std::vector< ::boost::uint32_t>& v)
|
||||
std::copy(u32to8type(v.begin()), u32to8type(v.end()), std::back_inserter(v8));
|
||||
#endif
|
||||
#ifndef BOOST_NO_STD_DISTANCE
|
||||
BOOST_CHECK_EQUAL(std::distance(u32to8type(v.begin()), u32to8type(v.end())), v8.size());
|
||||
BOOST_CHECK_EQUAL((std::size_t)std::distance(u32to8type(v.begin()), u32to8type(v.end())), v8.size());
|
||||
#endif
|
||||
#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
|
||||
v32.assign(u8to32type(v8.begin()), u8to32type(v8.end()));
|
||||
@ -151,7 +151,7 @@ void test(const std::vector< ::boost::uint32_t>& v)
|
||||
std::copy(u8to32type(v8.begin()), u8to32type(v8.end()), std::back_inserter(v32));
|
||||
#endif
|
||||
#ifndef BOOST_NO_STD_DISTANCE
|
||||
BOOST_CHECK_EQUAL(std::distance(u8to32type(v8.begin()), u8to32type(v8.end())), v32.size());
|
||||
BOOST_CHECK_EQUAL((std::size_t)std::distance(u8to32type(v8.begin()), u8to32type(v8.end())), v32.size());
|
||||
#endif
|
||||
BOOST_CHECK_EQUAL(v.size(), v32.size());
|
||||
i = v.begin();
|
||||
@ -165,12 +165,12 @@ void test(const std::vector< ::boost::uint32_t>& v)
|
||||
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_STD_ITERATOR) && !defined(_RWSTD_NO_CLASS_PARTIAL_SPEC)
|
||||
v8.assign(ru32to8type(u32to8type(v.end())), ru32to8type(u32to8type(v.begin())));
|
||||
#ifndef BOOST_NO_STD_DISTANCE
|
||||
BOOST_CHECK_EQUAL(std::distance(ru32to8type(u32to8type(v.end())), ru32to8type(u32to8type(v.begin()))), v8.size());
|
||||
BOOST_CHECK_EQUAL((std::size_t)std::distance(ru32to8type(u32to8type(v.end())), ru32to8type(u32to8type(v.begin()))), v8.size());
|
||||
#endif
|
||||
std::reverse(v8.begin(), v8.end());
|
||||
v32.assign(ru8to32type(u8to32type(v8.end())), ru8to32type(u8to32type(v8.begin())));
|
||||
#ifndef BOOST_NO_STD_DISTANCE
|
||||
BOOST_CHECK_EQUAL(std::distance(ru8to32type(u8to32type(v8.end())), ru8to32type(u8to32type(v8.begin()))), v32.size());
|
||||
BOOST_CHECK_EQUAL((std::size_t)std::distance(ru8to32type(u8to32type(v8.end())), ru8to32type(u8to32type(v8.begin()))), v32.size());
|
||||
#endif
|
||||
BOOST_CHECK_EQUAL(v.size(), v32.size());
|
||||
std::reverse(v32.begin(), v32.end());
|
||||
|
Reference in New Issue
Block a user