1// class template regex -*- C++ -*- 2 3// Copyright (C) 2010-2015 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 3, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// Under Section 7 of GPL version 3, you are granted additional 17// permissions described in the GCC Runtime Library Exception, version 18// 3.1, as published by the Free Software Foundation. 19 20// You should have received a copy of the GNU General Public License and 21// a copy of the GCC Runtime Library Exception along with this program; 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23// <http://www.gnu.org/licenses/>. 24 25/** 26 * @file bits/regex_constants.h 27 * @brief Constant definitions for the std regex library. 28 * 29 * This is an internal header file, included by other library headers. 30 * Do not attempt to use it directly. @headername{regex} 31 */ 32 33namespace std _GLIBCXX_VISIBILITY(default) 34{ 35/** 36 * @defgroup regex Regular Expressions 37 * 38 * A facility for performing regular expression pattern matching. 39 * @{ 40 */ 41 42/** 43 * @namespace std::regex_constants 44 * @brief ISO C++-0x entities sub namespace for regex. 45 */ 46namespace regex_constants 47{ 48_GLIBCXX_BEGIN_NAMESPACE_VERSION 49 50 /** 51 * @name 5.1 Regular Expression Syntax Options 52 */ 53 //@{ 54 enum __syntax_option 55 { 56 _S_icase, 57 _S_nosubs, 58 _S_optimize, 59 _S_collate, 60 _S_ECMAScript, 61 _S_basic, 62 _S_extended, 63 _S_awk, 64 _S_grep, 65 _S_egrep, 66 _S_syntax_last 67 }; 68 69 /** 70 * @brief This is a bitmask type indicating how to interpret the regex. 71 * 72 * The @c syntax_option_type is implementation defined but it is valid to 73 * perform bitwise operations on these values and expect the right thing to 74 * happen. 75 * 76 * A valid value of type syntax_option_type shall have exactly one of the 77 * elements @c ECMAScript, @c basic, @c extended, @c awk, @c grep, @c egrep 78 * %set. 79 */ 80 enum syntax_option_type : unsigned int { }; 81 82 /** 83 * Specifies that the matching of regular expressions against a character 84 * sequence shall be performed without regard to case. 85 */ 86 constexpr syntax_option_type icase = 87 static_cast<syntax_option_type>(1 << _S_icase); 88 89 /** 90 * Specifies that when a regular expression is matched against a character 91 * container sequence, no sub-expression matches are to be stored in the 92 * supplied match_results structure. 93 */ 94 constexpr syntax_option_type nosubs = 95 static_cast<syntax_option_type>(1 << _S_nosubs); 96 97 /** 98 * Specifies that the regular expression engine should pay more attention to 99 * the speed with which regular expressions are matched, and less to the 100 * speed with which regular expression objects are constructed. Otherwise 101 * it has no detectable effect on the program output. 102 */ 103 constexpr syntax_option_type optimize = 104 static_cast<syntax_option_type>(1 << _S_optimize); 105 106 /** 107 * Specifies that character ranges of the form [a-b] should be locale 108 * sensitive. 109 */ 110 constexpr syntax_option_type collate = 111 static_cast<syntax_option_type>(1 << _S_collate); 112 113 /** 114 * Specifies that the grammar recognized by the regular expression engine is 115 * that used by ECMAScript in ECMA-262 [Ecma International, ECMAScript 116 * Language Specification, Standard Ecma-262, third edition, 1999], as 117 * modified in section [28.13]. This grammar is similar to that defined 118 * in the PERL scripting language but extended with elements found in the 119 * POSIX regular expression grammar. 120 */ 121 constexpr syntax_option_type ECMAScript = 122 static_cast<syntax_option_type>(1 << _S_ECMAScript); 123 124 /** 125 * Specifies that the grammar recognized by the regular expression engine is 126 * that used by POSIX basic regular expressions in IEEE Std 1003.1-2001, 127 * Portable Operating System Interface (POSIX), Base Definitions and 128 * Headers, Section 9, Regular Expressions [IEEE, Information Technology -- 129 * Portable Operating System Interface (POSIX), IEEE Standard 1003.1-2001]. 130 */ 131 constexpr syntax_option_type basic = 132 static_cast<syntax_option_type>(1 << _S_basic); 133 134 /** 135 * Specifies that the grammar recognized by the regular expression engine is 136 * that used by POSIX extended regular expressions in IEEE Std 1003.1-2001, 137 * Portable Operating System Interface (POSIX), Base Definitions and 138 * Headers, Section 9, Regular Expressions. 139 */ 140 constexpr syntax_option_type extended = 141 static_cast<syntax_option_type>(1 << _S_extended); 142 143 /** 144 * Specifies that the grammar recognized by the regular expression engine is 145 * that used by POSIX utility awk in IEEE Std 1003.1-2001. This option is 146 * identical to syntax_option_type extended, except that C-style escape 147 * sequences are supported. These sequences are: 148 * \\\\, \\a, \\b, \\f, \\n, \\r, \\t , \\v, \\&apos,, &apos,, 149 * and \\ddd (where ddd is one, two, or three octal digits). 150 */ 151 constexpr syntax_option_type awk = 152 static_cast<syntax_option_type>(1 << _S_awk); 153 154 /** 155 * Specifies that the grammar recognized by the regular expression engine is 156 * that used by POSIX utility grep in IEEE Std 1003.1-2001. This option is 157 * identical to syntax_option_type basic, except that newlines are treated 158 * as whitespace. 159 */ 160 constexpr syntax_option_type grep = 161 static_cast<syntax_option_type>(1 << _S_grep); 162 163 /** 164 * Specifies that the grammar recognized by the regular expression engine is 165 * that used by POSIX utility grep when given the -E option in 166 * IEEE Std 1003.1-2001. This option is identical to syntax_option_type 167 * extended, except that newlines are treated as whitespace. 168 */ 169 constexpr syntax_option_type egrep = 170 static_cast<syntax_option_type>(1 << _S_egrep); 171 172 constexpr inline syntax_option_type 173 operator&(syntax_option_type __a, syntax_option_type __b) 174 { 175 return (syntax_option_type)(static_cast<unsigned int>(__a) 176 & static_cast<unsigned int>(__b)); 177 } 178 179 constexpr inline syntax_option_type 180 operator|(syntax_option_type __a, syntax_option_type __b) 181 { 182 return (syntax_option_type)(static_cast<unsigned int>(__a) 183 | static_cast<unsigned int>(__b)); 184 } 185 186 constexpr inline syntax_option_type 187 operator^(syntax_option_type __a, syntax_option_type __b) 188 { 189 return (syntax_option_type)(static_cast<unsigned int>(__a) 190 ^ static_cast<unsigned int>(__b)); 191 } 192 193 constexpr inline syntax_option_type 194 operator~(syntax_option_type __a) 195 { return (syntax_option_type)(~static_cast<unsigned int>(__a)); } 196 197 inline syntax_option_type& 198 operator&=(syntax_option_type& __a, syntax_option_type __b) 199 { return __a = __a & __b; } 200 201 inline syntax_option_type& 202 operator|=(syntax_option_type& __a, syntax_option_type __b) 203 { return __a = __a | __b; } 204 205 inline syntax_option_type& 206 operator^=(syntax_option_type& __a, syntax_option_type __b) 207 { return __a = __a ^ __b; } 208 209 //@} 210 211 /** 212 * @name 5.2 Matching Rules 213 * 214 * Matching a regular expression against a sequence of characters [first, 215 * last) proceeds according to the rules of the grammar specified for the 216 * regular expression object, modified according to the effects listed 217 * below for any bitmask elements set. 218 * 219 */ 220 //@{ 221 222 enum __match_flag 223 { 224 _S_not_bol, 225 _S_not_eol, 226 _S_not_bow, 227 _S_not_eow, 228 _S_any, 229 _S_not_null, 230 _S_continuous, 231 _S_prev_avail, 232 _S_sed, 233 _S_no_copy, 234 _S_first_only, 235 _S_match_flag_last 236 }; 237 238 /** 239 * @brief This is a bitmask type indicating regex matching rules. 240 * 241 * The @c match_flag_type is implementation defined but it is valid to 242 * perform bitwise operations on these values and expect the right thing to 243 * happen. 244 */ 245 enum match_flag_type : unsigned int { }; 246 247 /** 248 * The default matching rules. 249 */ 250 constexpr match_flag_type match_default = static_cast<match_flag_type>(0); 251 252 /** 253 * The first character in the sequence [first, last) is treated as though it 254 * is not at the beginning of a line, so the character (^) in the regular 255 * expression shall not match [first, first). 256 */ 257 constexpr match_flag_type match_not_bol = 258 static_cast<match_flag_type>(1 << _S_not_bol); 259 260 /** 261 * The last character in the sequence [first, last) is treated as though it 262 * is not at the end of a line, so the character ($) in the regular 263 * expression shall not match [last, last). 264 */ 265 constexpr match_flag_type match_not_eol = 266 static_cast<match_flag_type>(1 << _S_not_eol); 267 268 /** 269 * The expression \\b is not matched against the sub-sequence 270 * [first,first). 271 */ 272 constexpr match_flag_type match_not_bow = 273 static_cast<match_flag_type>(1 << _S_not_bow); 274 275 /** 276 * The expression \\b should not be matched against the sub-sequence 277 * [last,last). 278 */ 279 constexpr match_flag_type match_not_eow = 280 static_cast<match_flag_type>(1 << _S_not_eow); 281 282 /** 283 * If more than one match is possible then any match is an acceptable 284 * result. 285 */ 286 constexpr match_flag_type match_any = 287 static_cast<match_flag_type>(1 << _S_any); 288 289 /** 290 * The expression does not match an empty sequence. 291 */ 292 constexpr match_flag_type match_not_null = 293 static_cast<match_flag_type>(1 << _S_not_null); 294 295 /** 296 * The expression only matches a sub-sequence that begins at first . 297 */ 298 constexpr match_flag_type match_continuous = 299 static_cast<match_flag_type>(1 << _S_continuous); 300 301 /** 302 * --first is a valid iterator position. When this flag is set then the 303 * flags match_not_bol and match_not_bow are ignored by the regular 304 * expression algorithms 28.11 and iterators 28.12. 305 */ 306 constexpr match_flag_type match_prev_avail = 307 static_cast<match_flag_type>(1 << _S_prev_avail); 308 309 /** 310 * When a regular expression match is to be replaced by a new string, the 311 * new string is constructed using the rules used by the ECMAScript replace 312 * function in ECMA- 262 [Ecma International, ECMAScript Language 313 * Specification, Standard Ecma-262, third edition, 1999], part 15.5.4.11 314 * String.prototype.replace. In addition, during search and replace 315 * operations all non-overlapping occurrences of the regular expression 316 * are located and replaced, and sections of the input that did not match 317 * the expression are copied unchanged to the output string. 318 * 319 * Format strings (from ECMA-262 [15.5.4.11]): 320 * @li $$ The dollar-sign itself ($) 321 * @li $& The matched substring. 322 * @li $` The portion of @a string that precedes the matched substring. 323 * This would be match_results::prefix(). 324 * @li $' The portion of @a string that follows the matched substring. 325 * This would be match_results::suffix(). 326 * @li $n The nth capture, where n is in [1,9] and $n is not followed by a 327 * decimal digit. If n <= match_results::size() and the nth capture 328 * is undefined, use the empty string instead. If n > 329 * match_results::size(), the result is implementation-defined. 330 * @li $nn The nnth capture, where nn is a two-digit decimal number on 331 * [01, 99]. If nn <= match_results::size() and the nth capture is 332 * undefined, use the empty string instead. If 333 * nn > match_results::size(), the result is implementation-defined. 334 */ 335 constexpr match_flag_type format_default = static_cast<match_flag_type>(0); 336 337 /** 338 * When a regular expression match is to be replaced by a new string, the 339 * new string is constructed using the rules used by the POSIX sed utility 340 * in IEEE Std 1003.1- 2001 [IEEE, Information Technology -- Portable 341 * Operating System Interface (POSIX), IEEE Standard 1003.1-2001]. 342 */ 343 constexpr match_flag_type format_sed = 344 static_cast<match_flag_type>(1 << _S_sed); 345 346 /** 347 * During a search and replace operation, sections of the character 348 * container sequence being searched that do not match the regular 349 * expression shall not be copied to the output string. 350 */ 351 constexpr match_flag_type format_no_copy = 352 static_cast<match_flag_type>(1 << _S_no_copy); 353 354 /** 355 * When specified during a search and replace operation, only the first 356 * occurrence of the regular expression shall be replaced. 357 */ 358 constexpr match_flag_type format_first_only = 359 static_cast<match_flag_type>(1 << _S_first_only); 360 361 constexpr inline match_flag_type 362 operator&(match_flag_type __a, match_flag_type __b) 363 { 364 return (match_flag_type)(static_cast<unsigned int>(__a) 365 & static_cast<unsigned int>(__b)); 366 } 367 368 constexpr inline match_flag_type 369 operator|(match_flag_type __a, match_flag_type __b) 370 { 371 return (match_flag_type)(static_cast<unsigned int>(__a) 372 | static_cast<unsigned int>(__b)); 373 } 374 375 constexpr inline match_flag_type 376 operator^(match_flag_type __a, match_flag_type __b) 377 { 378 return (match_flag_type)(static_cast<unsigned int>(__a) 379 ^ static_cast<unsigned int>(__b)); 380 } 381 382 constexpr inline match_flag_type 383 operator~(match_flag_type __a) 384 { return (match_flag_type)(~static_cast<unsigned int>(__a)); } 385 386 inline match_flag_type& 387 operator&=(match_flag_type& __a, match_flag_type __b) 388 { return __a = __a & __b; } 389 390 inline match_flag_type& 391 operator|=(match_flag_type& __a, match_flag_type __b) 392 { return __a = __a | __b; } 393 394 inline match_flag_type& 395 operator^=(match_flag_type& __a, match_flag_type __b) 396 { return __a = __a ^ __b; } 397 398 //@} 399 400_GLIBCXX_END_NAMESPACE_VERSION 401} // namespace regex_constants 402 403/* @} */ // group regex 404} // namespace std 405 406