406 lines
10 KiB
Markdown
406 lines
10 KiB
Markdown
[re.req]
|
||
|
||
# 28 Text processing library [[text]](./#text)
|
||
|
||
## 28.6 Regular expressions library [[re]](re#req)
|
||
|
||
### 28.6.2 Requirements [re.req]
|
||
|
||
[1](#1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9032)
|
||
|
||
This subclause defines requirements on classes representing regular
|
||
expression traits[.](#1.sentence-1)
|
||
|
||
[*Note [1](#note-1)*:
|
||
|
||
The class templateregex_traits, defined in [[re.traits]](re.traits "28.6.6 Class template regex_traits"),
|
||
meets these requirements[.](#1.sentence-2)
|
||
|
||
â *end note*]
|
||
|
||
[2](#2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9041)
|
||
|
||
The class template basic_regex, defined in[[re.regex]](re.regex "28.6.7 Class template basic_regex"), needs a set of related types and
|
||
functions to complete the definition of its semantics[.](#2.sentence-1)
|
||
|
||
These types
|
||
and functions are provided as a set of member [*typedef-name*](dcl.typedef#nt:typedef-name "9.2.4 The typedef specifier [dcl.typedef]")*s* and functions
|
||
in the template parameter traits used by the basic_regex class
|
||
template[.](#2.sentence-2)
|
||
|
||
This subclause defines the semantics of these
|
||
members[.](#2.sentence-3)
|
||
|
||
[3](#3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9050)
|
||
|
||
To specialize class template basic_regex for a character
|
||
container CharT and its related regular
|
||
expression traits class Traits, use basic_regex<CharT, Traits>[.](#3.sentence-1)
|
||
|
||
[4](#4)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9055)
|
||
|
||
In the following requirements,
|
||
|
||
- [(4.1)](#4.1)
|
||
|
||
X denotes a traits class defining types and functions
|
||
for the character container type charT;
|
||
|
||
- [(4.2)](#4.2)
|
||
|
||
u is an object of type X;
|
||
|
||
- [(4.3)](#4.3)
|
||
|
||
v is an object of type const X;
|
||
|
||
- [(4.4)](#4.4)
|
||
|
||
p is a value of type const charT*;
|
||
|
||
- [(4.5)](#4.5)
|
||
|
||
I1 and I2 are input iterators ([[input.iterators]](input.iterators "24.3.5.3 Input iterators"));
|
||
|
||
- [(4.6)](#4.6)
|
||
|
||
F1 and F2 are forward iterators ([[forward.iterators]](forward.iterators "24.3.5.5 Forward iterators"));
|
||
|
||
- [(4.7)](#4.7)
|
||
|
||
c is a value of type const charT;
|
||
|
||
- [(4.8)](#4.8)
|
||
|
||
s is an object of type X::string_type;
|
||
|
||
- [(4.9)](#4.9)
|
||
|
||
cs is an object of type const X::string_type;
|
||
|
||
- [(4.10)](#4.10)
|
||
|
||
b is a value of type bool;
|
||
|
||
- [(4.11)](#4.11)
|
||
|
||
I is a value of type int;
|
||
|
||
- [(4.12)](#4.12)
|
||
|
||
cl is an object of type X::char_class_type; and
|
||
|
||
- [(4.13)](#4.13)
|
||
|
||
loc is an object of type X::locale_type[.](#4.sentence-1)
|
||
|
||
[5](#5)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9091)
|
||
|
||
A traits class X meets the regular expression traits requirements
|
||
if the following types and expressions are well-formed and have the specified
|
||
semantics[.](#5.sentence-1)
|
||
|
||
[ð](#itemdecl:1)
|
||
|
||
`typename X::char_type
|
||
`
|
||
|
||
[6](#6)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9101)
|
||
|
||
*Result*: charT,
|
||
the character container type used in the implementation of class
|
||
template basic_regex[.](#6.sentence-1)
|
||
|
||
[ð](#itemdecl:2)
|
||
|
||
`typename X::string_type
|
||
`
|
||
|
||
[7](#7)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9113)
|
||
|
||
*Result*: basic_string<charT>
|
||
|
||
[ð](#itemdecl:3)
|
||
|
||
`typename X::locale_type
|
||
`
|
||
|
||
[8](#8)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9123)
|
||
|
||
*Result*: A copy constructible type
|
||
that represents the locale used by the traits class[.](#8.sentence-1)
|
||
|
||
[ð](#itemdecl:4)
|
||
|
||
`typename X::char_class_type
|
||
`
|
||
|
||
[9](#9)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9134)
|
||
|
||
*Result*: A bitmask type ([[bitmask.types]](bitmask.types "16.3.3.3.3 Bitmask types"))
|
||
representing a particular character classification[.](#9.sentence-1)
|
||
|
||
[ð](#itemdecl:5)
|
||
|
||
`X::length(p)
|
||
`
|
||
|
||
[10](#10)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9145)
|
||
|
||
*Result*: size_t
|
||
|
||
[11](#11)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9149)
|
||
|
||
*Returns*: The smallest i such that p[i] == 0[.](#11.sentence-1)
|
||
|
||
[12](#12)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9153)
|
||
|
||
*Complexity*: Linear in i[.](#12.sentence-1)
|
||
|
||
[ð](#itemdecl:6)
|
||
|
||
`v.translate(c)
|
||
`
|
||
|
||
[13](#13)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9163)
|
||
|
||
*Result*: X::char_type
|
||
|
||
[14](#14)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9167)
|
||
|
||
*Returns*: A character such that for any character d that is to be considered equivalent to c then v.translate(c) == v.translate(d)[.](#14.sentence-1)
|
||
|
||
[ð](#itemdecl:7)
|
||
|
||
`v.translate_nocase(c)
|
||
`
|
||
|
||
[15](#15)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9179)
|
||
|
||
*Result*: X::char_type
|
||
|
||
[16](#16)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9183)
|
||
|
||
*Returns*: For all characters C that are to be considered equivalent to c when comparisons are to be performed without regard to case,
|
||
then v.translate_nocase(c) == v.translate_nocase(C)[.](#16.sentence-1)
|
||
|
||
[ð](#itemdecl:8)
|
||
|
||
`v.transform(F1, F2)
|
||
`
|
||
|
||
[17](#17)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9195)
|
||
|
||
*Result*: X::string_type
|
||
|
||
[18](#18)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9199)
|
||
|
||
*Returns*: A sort key for the character sequence designated by
|
||
the iterator range [F1, F2) such that
|
||
if the character sequence [G1, G2) sorts before
|
||
the character sequence [H1, H2)
|
||
then v.transform(G1, G2) < v.transform(H1, H2)[.](#18.sentence-1)
|
||
|
||
[ð](#itemdecl:9)
|
||
|
||
`v.transform_primary(F1, F2)
|
||
`
|
||
|
||
[19](#19)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9213)
|
||
|
||
*Result*: X::string_type
|
||
|
||
[20](#20)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9219)
|
||
|
||
*Returns*: A sort key for the character sequence designated by
|
||
the iterator range [F1, F2) such that
|
||
if the character sequence [G1, G2) sorts before
|
||
the character sequence [H1, H2)
|
||
when character case is not considered
|
||
then v.transform_primary(G1, G2) < v.transform_primary(H1, H2)[.](#20.sentence-1)
|
||
|
||
[ð](#itemdecl:10)
|
||
|
||
`v.lookup_collatename(F1, F2)
|
||
`
|
||
|
||
[21](#21)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9234)
|
||
|
||
*Result*: X::string_type
|
||
|
||
[22](#22)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9238)
|
||
|
||
*Returns*: A sequence of characters that represents the collating element
|
||
consisting of the character sequence designated by
|
||
the iterator range [F1, F2)[.](#22.sentence-1)
|
||
|
||
Returns an empty string
|
||
if the character sequence is not a valid collating element[.](#22.sentence-2)
|
||
|
||
[ð](#itemdecl:11)
|
||
|
||
`v.lookup_classname(F1, F2, b)
|
||
`
|
||
|
||
[23](#23)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9252)
|
||
|
||
*Result*: X::char_class_type
|
||
|
||
[24](#24)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9256)
|
||
|
||
*Returns*: Converts the character sequence designated by the iterator range
|
||
[F1, F2) into a value of a bitmask type that can
|
||
subsequently be passed to isctype[.](#24.sentence-1)
|
||
|
||
Values returned from lookup_classname can be bitwise or'ed together;
|
||
the resulting value represents membership
|
||
in either of the corresponding character classes[.](#24.sentence-2)
|
||
|
||
If b is true, the returned bitmask is suitable for
|
||
matching characters without regard to their case[.](#24.sentence-3)
|
||
|
||
Returns 0 if the character sequence is not the name of
|
||
a character class recognized by X[.](#24.sentence-4)
|
||
|
||
The value returned shall be independent of
|
||
the case of the characters in the sequence[.](#24.sentence-5)
|
||
|
||
[ð](#itemdecl:12)
|
||
|
||
`v.isctype(c, cl)
|
||
`
|
||
|
||
[25](#25)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9278)
|
||
|
||
*Result*: bool
|
||
|
||
[26](#26)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9282)
|
||
|
||
*Returns*: Returns true if character c is a member of
|
||
one of the character classes designated by cl,false otherwise[.](#26.sentence-1)
|
||
|
||
[ð](#itemdecl:13)
|
||
|
||
`v.value(c, I)
|
||
`
|
||
|
||
[27](#27)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9294)
|
||
|
||
*Result*: int
|
||
|
||
[28](#28)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9298)
|
||
|
||
*Returns*: Returns the value represented by the digit *c* in base*I* if the character *c* is a valid digit in base *I*;
|
||
otherwise returns -1[.](#28.sentence-1)
|
||
|
||
[*Note [2](#note-2)*:
|
||
|
||
The value of *I* will only be 8, 10, or 16[.](#28.sentence-2)
|
||
|
||
â *end note*]
|
||
|
||
[ð](#itemdecl:14)
|
||
|
||
`u.imbue(loc)
|
||
`
|
||
|
||
[29](#29)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9313)
|
||
|
||
*Result*: X::locale_type
|
||
|
||
[30](#30)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9318)
|
||
|
||
*Effects*: Imbues u with the locale loc and
|
||
returns the previous locale used by u if any[.](#30.sentence-1)
|
||
|
||
[ð](#itemdecl:15)
|
||
|
||
`v.getloc()
|
||
`
|
||
|
||
[31](#31)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9329)
|
||
|
||
*Result*: X::locale_type
|
||
|
||
[32](#32)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9333)
|
||
|
||
*Returns*: Returns the current locale used by v, if any[.](#32.sentence-1)
|
||
|
||
[33](#33)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L9338)
|
||
|
||
[*Note [3](#note-3)*:
|
||
|
||
Class template regex_traits meets the requirements for a
|
||
regular expression traits class when it is specialized forchar or wchar_t[.](#33.sentence-1)
|
||
|
||
This class template is described in
|
||
the header [<regex>](re.syn#header:%3cregex%3e "28.6.3 Header <regex> synopsis [re.syn]"), and is described in [[re.traits]](re.traits "28.6.6 Class template regex_traits")[.](#33.sentence-2)
|
||
|
||
â *end note*]
|