1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // REQUIRES: locale.cs_CZ.ISO8859-2 11 12 // <regex> 13 14 // template <class BidirectionalIterator, class Allocator, class charT, class traits> 15 // bool 16 // regex_search(BidirectionalIterator first, BidirectionalIterator last, 17 // match_results<BidirectionalIterator, Allocator>& m, 18 // const basic_regex<charT, traits>& e, 19 // regex_constants::match_flag_type flags = regex_constants::match_default); 20 21 // TODO: investigation needed 22 // XFAIL: linux-gnu 23 24 #include <regex> 25 #include <cassert> 26 #include "test_macros.h" 27 #include "test_iterators.h" 28 29 #include "platform_support.h" // locale name macros 30 31 int main() 32 { 33 { 34 std::cmatch m; 35 const char s[] = "a"; 36 assert(std::regex_search(s, m, std::regex("a", std::regex_constants::extended))); 37 assert(m.size() == 1); 38 assert(!m.empty()); 39 assert(!m.prefix().matched); 40 assert(m.prefix().first == s); 41 assert(m.prefix().second == m[0].first); 42 assert(!m.suffix().matched); 43 assert(m.suffix().first == m[0].second); 44 assert(m.suffix().second == s+1); 45 assert(m.length(0) == 1); 46 assert(m.position(0) == 0); 47 assert(m.str(0) == "a"); 48 } 49 { 50 std::cmatch m; 51 const char s[] = "ab"; 52 assert(std::regex_search(s, m, std::regex("ab", std::regex_constants::extended))); 53 assert(m.size() == 1); 54 assert(!m.prefix().matched); 55 assert(m.prefix().first == s); 56 assert(m.prefix().second == m[0].first); 57 assert(!m.suffix().matched); 58 assert(m.suffix().first == m[0].second); 59 assert(m.suffix().second == s+2); 60 assert(m.length(0) == 2); 61 assert(m.position(0) == 0); 62 assert(m.str(0) == "ab"); 63 } 64 { 65 std::cmatch m; 66 const char s[] = "ab"; 67 assert(!std::regex_search(s, m, std::regex("ba", std::regex_constants::extended))); 68 assert(m.size() == 0); 69 assert(m.empty()); 70 } 71 { 72 std::cmatch m; 73 const char s[] = "aab"; 74 assert(std::regex_search(s, m, std::regex("ab", std::regex_constants::extended))); 75 assert(m.size() == 1); 76 assert(m.prefix().matched); 77 assert(m.prefix().first == s); 78 assert(m.prefix().second == m[0].first); 79 assert(!m.suffix().matched); 80 assert(m.suffix().first == m[0].second); 81 assert(m.suffix().second == s+3); 82 assert(m.length(0) == 2); 83 assert(m.position(0) == 1); 84 assert(m.str(0) == "ab"); 85 } 86 { 87 std::cmatch m; 88 const char s[] = "aab"; 89 assert(!std::regex_search(s, m, std::regex("ab", std::regex_constants::extended), 90 std::regex_constants::match_continuous)); 91 assert(m.size() == 0); 92 } 93 { 94 std::cmatch m; 95 const char s[] = "abcd"; 96 assert(std::regex_search(s, m, std::regex("bc", std::regex_constants::extended))); 97 assert(m.size() == 1); 98 assert(m.prefix().matched); 99 assert(m.prefix().first == s); 100 assert(m.prefix().second == m[0].first); 101 assert(m.suffix().matched); 102 assert(m.suffix().first == m[0].second); 103 assert(m.suffix().second == s+4); 104 assert(m.length(0) == 2); 105 assert(m.position(0) == 1); 106 assert(m.str(0) == "bc"); 107 } 108 { 109 std::cmatch m; 110 const char s[] = "abbc"; 111 assert(std::regex_search(s, m, std::regex("ab*c", std::regex_constants::extended))); 112 assert(m.size() == 1); 113 assert(!m.prefix().matched); 114 assert(m.prefix().first == s); 115 assert(m.prefix().second == m[0].first); 116 assert(!m.suffix().matched); 117 assert(m.suffix().first == m[0].second); 118 assert(m.suffix().second == s+4); 119 assert(m.length(0) == 4); 120 assert(m.position(0) == 0); 121 assert(m.str(0) == s); 122 } 123 { 124 std::cmatch m; 125 const char s[] = "ababc"; 126 assert(std::regex_search(s, m, std::regex("(ab)*c", std::regex_constants::extended))); 127 assert(m.size() == 2); 128 assert(!m.prefix().matched); 129 assert(m.prefix().first == s); 130 assert(m.prefix().second == m[0].first); 131 assert(!m.suffix().matched); 132 assert(m.suffix().first == m[0].second); 133 assert(m.suffix().second == s+5); 134 assert(m.length(0) == 5); 135 assert(m.position(0) == 0); 136 assert(m.str(0) == s); 137 assert(m.length(1) == 2); 138 assert(m.position(1) == 2); 139 assert(m.str(1) == "ab"); 140 } 141 { 142 std::cmatch m; 143 const char s[] = "abcdefghijk"; 144 assert(std::regex_search(s, m, std::regex("cd((e)fg)hi", 145 std::regex_constants::extended))); 146 assert(m.size() == 3); 147 assert(m.prefix().matched); 148 assert(m.prefix().first == s); 149 assert(m.prefix().second == m[0].first); 150 assert(m.suffix().matched); 151 assert(m.suffix().first == m[0].second); 152 assert(m.suffix().second == s+std::regex_traits<char>::length(s)); 153 assert(m.length(0) == 7); 154 assert(m.position(0) == 2); 155 assert(m.str(0) == "cdefghi"); 156 assert(m.length(1) == 3); 157 assert(m.position(1) == 4); 158 assert(m.str(1) == "efg"); 159 assert(m.length(2) == 1); 160 assert(m.position(2) == 4); 161 assert(m.str(2) == "e"); 162 } 163 { 164 std::cmatch m; 165 const char s[] = "abc"; 166 assert(std::regex_search(s, m, std::regex("^abc", std::regex_constants::extended))); 167 assert(m.size() == 1); 168 assert(!m.prefix().matched); 169 assert(m.prefix().first == s); 170 assert(m.prefix().second == m[0].first); 171 assert(!m.suffix().matched); 172 assert(m.suffix().first == m[0].second); 173 assert(m.suffix().second == s+3); 174 assert(m.length(0) == 3); 175 assert(m.position(0) == 0); 176 assert(m.str(0) == s); 177 } 178 { 179 std::cmatch m; 180 const char s[] = "abcd"; 181 assert(std::regex_search(s, m, std::regex("^abc", std::regex_constants::extended))); 182 assert(m.size() == 1); 183 assert(!m.prefix().matched); 184 assert(m.prefix().first == s); 185 assert(m.prefix().second == m[0].first); 186 assert(m.suffix().matched); 187 assert(m.suffix().first == m[0].second); 188 assert(m.suffix().second == s+4); 189 assert(m.length(0) == 3); 190 assert(m.position(0) == 0); 191 assert(m.str(0) == "abc"); 192 } 193 { 194 std::cmatch m; 195 const char s[] = "aabc"; 196 assert(!std::regex_search(s, m, std::regex("^abc", std::regex_constants::extended))); 197 assert(m.size() == 0); 198 } 199 { 200 std::cmatch m; 201 const char s[] = "abc"; 202 assert(std::regex_search(s, m, std::regex("abc$", std::regex_constants::extended))); 203 assert(m.size() == 1); 204 assert(!m.prefix().matched); 205 assert(m.prefix().first == s); 206 assert(m.prefix().second == m[0].first); 207 assert(!m.suffix().matched); 208 assert(m.suffix().first == m[0].second); 209 assert(m.suffix().second == s+3); 210 assert(m.length(0) == 3); 211 assert(m.position(0) == 0); 212 assert(m.str(0) == s); 213 } 214 { 215 std::cmatch m; 216 const char s[] = "efabc"; 217 assert(std::regex_search(s, m, std::regex("abc$", std::regex_constants::extended))); 218 assert(m.size() == 1); 219 assert(m.prefix().matched); 220 assert(m.prefix().first == s); 221 assert(m.prefix().second == m[0].first); 222 assert(!m.suffix().matched); 223 assert(m.suffix().first == m[0].second); 224 assert(m.suffix().second == s+5); 225 assert(m.length(0) == 3); 226 assert(m.position(0) == 2); 227 assert(m.str(0) == s+2); 228 } 229 { 230 std::cmatch m; 231 const char s[] = "efabcg"; 232 assert(!std::regex_search(s, m, std::regex("abc$", std::regex_constants::extended))); 233 assert(m.size() == 0); 234 } 235 { 236 std::cmatch m; 237 const char s[] = "abc"; 238 assert(std::regex_search(s, m, std::regex("a.c", std::regex_constants::extended))); 239 assert(m.size() == 1); 240 assert(!m.prefix().matched); 241 assert(m.prefix().first == s); 242 assert(m.prefix().second == m[0].first); 243 assert(!m.suffix().matched); 244 assert(m.suffix().first == m[0].second); 245 assert(m.suffix().second == s+3); 246 assert(m.length(0) == 3); 247 assert(m.position(0) == 0); 248 assert(m.str(0) == s); 249 } 250 { 251 std::cmatch m; 252 const char s[] = "acc"; 253 assert(std::regex_search(s, m, std::regex("a.c", std::regex_constants::extended))); 254 assert(m.size() == 1); 255 assert(!m.prefix().matched); 256 assert(m.prefix().first == s); 257 assert(m.prefix().second == m[0].first); 258 assert(!m.suffix().matched); 259 assert(m.suffix().first == m[0].second); 260 assert(m.suffix().second == s+3); 261 assert(m.length(0) == 3); 262 assert(m.position(0) == 0); 263 assert(m.str(0) == s); 264 } 265 { 266 std::cmatch m; 267 const char s[] = "acc"; 268 assert(std::regex_search(s, m, std::regex("a.c", std::regex_constants::extended))); 269 assert(m.size() == 1); 270 assert(!m.prefix().matched); 271 assert(m.prefix().first == s); 272 assert(m.prefix().second == m[0].first); 273 assert(!m.suffix().matched); 274 assert(m.suffix().first == m[0].second); 275 assert(m.suffix().second == s+3); 276 assert(m.length(0) == 3); 277 assert(m.position(0) == 0); 278 assert(m.str(0) == s); 279 } 280 { 281 std::cmatch m; 282 const char s[] = "abcdef"; 283 assert(std::regex_search(s, m, std::regex("(.*).*", std::regex_constants::extended))); 284 assert(m.size() == 2); 285 assert(!m.prefix().matched); 286 assert(m.prefix().first == s); 287 assert(m.prefix().second == m[0].first); 288 assert(!m.suffix().matched); 289 assert(m.suffix().first == m[0].second); 290 assert(m.suffix().second == s+6); 291 assert(m.length(0) == 6); 292 assert(m.position(0) == 0); 293 assert(m.str(0) == s); 294 assert(m.length(1) == 6); 295 assert(m.position(1) == 0); 296 assert(m.str(1) == s); 297 } 298 { 299 std::cmatch m; 300 const char s[] = "bc"; 301 assert(std::regex_search(s, m, std::regex("(a*)*", std::regex_constants::extended))); 302 assert(m.size() == 2); 303 assert(!m.prefix().matched); 304 assert(m.prefix().first == s); 305 assert(m.prefix().second == m[0].first); 306 assert(m.suffix().matched); 307 assert(m.suffix().first == m[0].second); 308 assert(m.suffix().second == s+2); 309 assert(m.length(0) == 0); 310 assert(m.position(0) == 0); 311 assert(m.str(0) == ""); 312 assert(m.length(1) == 0); 313 assert(m.position(1) == 0); 314 assert(m.str(1) == ""); 315 } 316 { 317 std::cmatch m; 318 const char s[] = "abbc"; 319 assert(!std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::extended))); 320 assert(m.size() == 0); 321 } 322 { 323 std::cmatch m; 324 const char s[] = "abbbc"; 325 assert(std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::extended))); 326 assert(m.size() == 1); 327 assert(!m.prefix().matched); 328 assert(m.prefix().first == s); 329 assert(m.prefix().second == m[0].first); 330 assert(!m.suffix().matched); 331 assert(m.suffix().first == m[0].second); 332 assert(m.suffix().second == m[0].second); 333 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 334 assert(m.position(0) == 0); 335 assert(m.str(0) == s); 336 } 337 { 338 std::cmatch m; 339 const char s[] = "abbbbc"; 340 assert(std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::extended))); 341 assert(m.size() == 1); 342 assert(!m.prefix().matched); 343 assert(m.prefix().first == s); 344 assert(m.prefix().second == m[0].first); 345 assert(!m.suffix().matched); 346 assert(m.suffix().first == m[0].second); 347 assert(m.suffix().second == m[0].second); 348 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 349 assert(m.position(0) == 0); 350 assert(m.str(0) == s); 351 } 352 { 353 std::cmatch m; 354 const char s[] = "abbbbbc"; 355 assert(std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::extended))); 356 assert(m.size() == 1); 357 assert(!m.prefix().matched); 358 assert(m.prefix().first == s); 359 assert(m.prefix().second == m[0].first); 360 assert(!m.suffix().matched); 361 assert(m.suffix().first == m[0].second); 362 assert(m.suffix().second == m[0].second); 363 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 364 assert(m.position(0) == 0); 365 assert(m.str(0) == s); 366 } 367 { 368 std::cmatch m; 369 const char s[] = "adefc"; 370 assert(!std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::extended))); 371 assert(m.size() == 0); 372 } 373 { 374 std::cmatch m; 375 const char s[] = "abbbbbbc"; 376 assert(!std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::extended))); 377 assert(m.size() == 0); 378 } 379 { 380 std::cmatch m; 381 const char s[] = "adec"; 382 assert(!std::regex_search(s, m, std::regex("a.{3,5}c", std::regex_constants::extended))); 383 assert(m.size() == 0); 384 } 385 { 386 std::cmatch m; 387 const char s[] = "adefc"; 388 assert(std::regex_search(s, m, std::regex("a.{3,5}c", std::regex_constants::extended))); 389 assert(m.size() == 1); 390 assert(!m.prefix().matched); 391 assert(m.prefix().first == s); 392 assert(m.prefix().second == m[0].first); 393 assert(!m.suffix().matched); 394 assert(m.suffix().first == m[0].second); 395 assert(m.suffix().second == m[0].second); 396 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 397 assert(m.position(0) == 0); 398 assert(m.str(0) == s); 399 } 400 { 401 std::cmatch m; 402 const char s[] = "adefgc"; 403 assert(std::regex_search(s, m, std::regex("a.{3,5}c", std::regex_constants::extended))); 404 assert(m.size() == 1); 405 assert(!m.prefix().matched); 406 assert(m.prefix().first == s); 407 assert(m.prefix().second == m[0].first); 408 assert(!m.suffix().matched); 409 assert(m.suffix().first == m[0].second); 410 assert(m.suffix().second == m[0].second); 411 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 412 assert(m.position(0) == 0); 413 assert(m.str(0) == s); 414 } 415 { 416 std::cmatch m; 417 const char s[] = "adefghc"; 418 assert(std::regex_search(s, m, std::regex("a.{3,5}c", std::regex_constants::extended))); 419 assert(m.size() == 1); 420 assert(!m.prefix().matched); 421 assert(m.prefix().first == s); 422 assert(m.prefix().second == m[0].first); 423 assert(!m.suffix().matched); 424 assert(m.suffix().first == m[0].second); 425 assert(m.suffix().second == m[0].second); 426 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 427 assert(m.position(0) == 0); 428 assert(m.str(0) == s); 429 } 430 { 431 std::cmatch m; 432 const char s[] = "adefghic"; 433 assert(!std::regex_search(s, m, std::regex("a.{3,5}c", std::regex_constants::extended))); 434 assert(m.size() == 0); 435 } 436 { 437 std::cmatch m; 438 const char s[] = "tournament"; 439 assert(std::regex_search(s, m, std::regex("tour|to|tournament", 440 std::regex_constants::extended))); 441 assert(m.size() == 1); 442 assert(!m.prefix().matched); 443 assert(m.prefix().first == s); 444 assert(m.prefix().second == m[0].first); 445 assert(!m.suffix().matched); 446 assert(m.suffix().first == m[0].second); 447 assert(m.suffix().second == m[0].second); 448 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 449 assert(m.position(0) == 0); 450 assert(m.str(0) == s); 451 } 452 { 453 std::cmatch m; 454 const char s[] = "tournamenttotour"; 455 assert(std::regex_search(s, m, std::regex("(tour|to|tournament)+", 456 std::regex_constants::extended | std::regex_constants::nosubs))); 457 assert(m.size() == 1); 458 assert(!m.prefix().matched); 459 assert(m.prefix().first == s); 460 assert(m.prefix().second == m[0].first); 461 assert(!m.suffix().matched); 462 assert(m.suffix().first == m[0].second); 463 assert(m.suffix().second == m[0].second); 464 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 465 assert(m.position(0) == 0); 466 assert(m.str(0) == s); 467 } 468 { 469 std::cmatch m; 470 const char s[] = "ttotour"; 471 assert(std::regex_search(s, m, std::regex("(tour|to|t)+", 472 std::regex_constants::extended))); 473 assert(m.size() == 2); 474 assert(!m.prefix().matched); 475 assert(m.prefix().first == s); 476 assert(m.prefix().second == m[0].first); 477 assert(!m.suffix().matched); 478 assert(m.suffix().first == m[0].second); 479 assert(m.suffix().second == m[0].second); 480 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 481 assert(m.position(0) == 0); 482 assert(m.str(0) == s); 483 assert(m.length(1) == 4); 484 assert(m.position(1) == 3); 485 assert(m.str(1) == "tour"); 486 } 487 { 488 std::cmatch m; 489 const char s[] = "-ab,ab-"; 490 assert(!std::regex_search(s, m, std::regex("-(.*),\1-", std::regex_constants::extended))); 491 assert(m.size() == 0); 492 } 493 { 494 std::cmatch m; 495 const char s[] = "-ab,ab-"; 496 assert(std::regex_search(s, m, std::regex("-.*,.*-", std::regex_constants::extended))); 497 assert(m.size() == 1); 498 assert(!m.prefix().matched); 499 assert(m.prefix().first == s); 500 assert(m.prefix().second == m[0].first); 501 assert(!m.suffix().matched); 502 assert(m.suffix().first == m[0].second); 503 assert(m.suffix().second == m[0].second); 504 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 505 assert(m.position(0) == 0); 506 assert(m.str(0) == s); 507 } 508 { 509 std::cmatch m; 510 const char s[] = "a"; 511 assert(std::regex_search(s, m, std::regex("^[a]$", 512 std::regex_constants::extended))); 513 assert(m.size() == 1); 514 assert(!m.prefix().matched); 515 assert(m.prefix().first == s); 516 assert(m.prefix().second == m[0].first); 517 assert(!m.suffix().matched); 518 assert(m.suffix().first == m[0].second); 519 assert(m.suffix().second == m[0].second); 520 assert(m.length(0) == 1); 521 assert(m.position(0) == 0); 522 assert(m.str(0) == "a"); 523 } 524 { 525 std::cmatch m; 526 const char s[] = "a"; 527 assert(std::regex_search(s, m, std::regex("^[ab]$", 528 std::regex_constants::extended))); 529 assert(m.size() == 1); 530 assert(!m.prefix().matched); 531 assert(m.prefix().first == s); 532 assert(m.prefix().second == m[0].first); 533 assert(!m.suffix().matched); 534 assert(m.suffix().first == m[0].second); 535 assert(m.suffix().second == m[0].second); 536 assert(m.length(0) == 1); 537 assert(m.position(0) == 0); 538 assert(m.str(0) == "a"); 539 } 540 { 541 std::cmatch m; 542 const char s[] = "c"; 543 assert(std::regex_search(s, m, std::regex("^[a-f]$", 544 std::regex_constants::extended))); 545 assert(m.size() == 1); 546 assert(!m.prefix().matched); 547 assert(m.prefix().first == s); 548 assert(m.prefix().second == m[0].first); 549 assert(!m.suffix().matched); 550 assert(m.suffix().first == m[0].second); 551 assert(m.suffix().second == m[0].second); 552 assert(m.length(0) == 1); 553 assert(m.position(0) == 0); 554 assert(m.str(0) == s); 555 } 556 { 557 std::cmatch m; 558 const char s[] = "g"; 559 assert(!std::regex_search(s, m, std::regex("^[a-f]$", 560 std::regex_constants::extended))); 561 assert(m.size() == 0); 562 } 563 { 564 std::cmatch m; 565 const char s[] = "Iraqi"; 566 assert(std::regex_search(s, m, std::regex("q[^u]", 567 std::regex_constants::extended))); 568 assert(m.size() == 1); 569 assert(m.prefix().matched); 570 assert(m.prefix().first == s); 571 assert(m.prefix().second == m[0].first); 572 assert(!m.suffix().matched); 573 assert(m.suffix().first == m[0].second); 574 assert(m.suffix().second == m[0].second); 575 assert(m.length(0) == 2); 576 assert(m.position(0) == 3); 577 assert(m.str(0) == "qi"); 578 } 579 { 580 std::cmatch m; 581 const char s[] = "Iraq"; 582 assert(!std::regex_search(s, m, std::regex("q[^u]", 583 std::regex_constants::extended))); 584 assert(m.size() == 0); 585 } 586 { 587 std::cmatch m; 588 const char s[] = "AmB"; 589 assert(std::regex_search(s, m, std::regex("A[[:lower:]]B", 590 std::regex_constants::extended))); 591 assert(m.size() == 1); 592 assert(!m.prefix().matched); 593 assert(m.prefix().first == s); 594 assert(m.prefix().second == m[0].first); 595 assert(!m.suffix().matched); 596 assert(m.suffix().first == m[0].second); 597 assert(m.suffix().second == m[0].second); 598 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 599 assert(m.position(0) == 0); 600 assert(m.str(0) == s); 601 } 602 { 603 std::cmatch m; 604 const char s[] = "AMB"; 605 assert(!std::regex_search(s, m, std::regex("A[[:lower:]]B", 606 std::regex_constants::extended))); 607 assert(m.size() == 0); 608 } 609 { 610 std::cmatch m; 611 const char s[] = "AMB"; 612 assert(std::regex_search(s, m, std::regex("A[^[:lower:]]B", 613 std::regex_constants::extended))); 614 assert(m.size() == 1); 615 assert(!m.prefix().matched); 616 assert(m.prefix().first == s); 617 assert(m.prefix().second == m[0].first); 618 assert(!m.suffix().matched); 619 assert(m.suffix().first == m[0].second); 620 assert(m.suffix().second == m[0].second); 621 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 622 assert(m.position(0) == 0); 623 assert(m.str(0) == s); 624 } 625 { 626 std::cmatch m; 627 const char s[] = "AmB"; 628 assert(!std::regex_search(s, m, std::regex("A[^[:lower:]]B", 629 std::regex_constants::extended))); 630 assert(m.size() == 0); 631 } 632 { 633 std::cmatch m; 634 const char s[] = "A5B"; 635 assert(!std::regex_search(s, m, std::regex("A[^[:lower:]0-9]B", 636 std::regex_constants::extended))); 637 assert(m.size() == 0); 638 } 639 { 640 std::cmatch m; 641 const char s[] = "A?B"; 642 assert(std::regex_search(s, m, std::regex("A[^[:lower:]0-9]B", 643 std::regex_constants::extended))); 644 assert(m.size() == 1); 645 assert(!m.prefix().matched); 646 assert(m.prefix().first == s); 647 assert(m.prefix().second == m[0].first); 648 assert(!m.suffix().matched); 649 assert(m.suffix().first == m[0].second); 650 assert(m.suffix().second == m[0].second); 651 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 652 assert(m.position(0) == 0); 653 assert(m.str(0) == s); 654 } 655 { 656 std::cmatch m; 657 const char s[] = "-"; 658 assert(std::regex_search(s, m, std::regex("[a[.hyphen.]z]", 659 std::regex_constants::extended))); 660 assert(m.size() == 1); 661 assert(!m.prefix().matched); 662 assert(m.prefix().first == s); 663 assert(m.prefix().second == m[0].first); 664 assert(!m.suffix().matched); 665 assert(m.suffix().first == m[0].second); 666 assert(m.suffix().second == m[0].second); 667 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 668 assert(m.position(0) == 0); 669 assert(m.str(0) == s); 670 } 671 { 672 std::cmatch m; 673 const char s[] = "z"; 674 assert(std::regex_search(s, m, std::regex("[a[.hyphen.]z]", 675 std::regex_constants::extended))); 676 assert(m.size() == 1); 677 assert(!m.prefix().matched); 678 assert(m.prefix().first == s); 679 assert(m.prefix().second == m[0].first); 680 assert(!m.suffix().matched); 681 assert(m.suffix().first == m[0].second); 682 assert(m.suffix().second == m[0].second); 683 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 684 assert(m.position(0) == 0); 685 assert(m.str(0) == s); 686 } 687 { 688 std::cmatch m; 689 const char s[] = "m"; 690 assert(!std::regex_search(s, m, std::regex("[a[.hyphen.]z]", 691 std::regex_constants::extended))); 692 assert(m.size() == 0); 693 } 694 std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2)); 695 { 696 std::cmatch m; 697 const char s[] = "m"; 698 assert(std::regex_search(s, m, std::regex("[a[=M=]z]", 699 std::regex_constants::extended))); 700 assert(m.size() == 1); 701 assert(!m.prefix().matched); 702 assert(m.prefix().first == s); 703 assert(m.prefix().second == m[0].first); 704 assert(!m.suffix().matched); 705 assert(m.suffix().first == m[0].second); 706 assert(m.suffix().second == m[0].second); 707 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 708 assert(m.position(0) == 0); 709 assert(m.str(0) == s); 710 } 711 { 712 std::cmatch m; 713 const char s[] = "Ch"; 714 assert(std::regex_search(s, m, std::regex("[a[.ch.]z]", 715 std::regex_constants::extended | std::regex_constants::icase))); 716 assert(m.size() == 1); 717 assert(!m.prefix().matched); 718 assert(m.prefix().first == s); 719 assert(m.prefix().second == m[0].first); 720 assert(!m.suffix().matched); 721 assert(m.suffix().first == m[0].second); 722 assert(m.suffix().second == m[0].second); 723 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<char>::length(s)); 724 assert(m.position(0) == 0); 725 assert(m.str(0) == s); 726 } 727 std::locale::global(std::locale("C")); 728 { 729 std::cmatch m; 730 const char s[] = "m"; 731 assert(!std::regex_search(s, m, std::regex("[a[=M=]z]", 732 std::regex_constants::extended))); 733 assert(m.size() == 0); 734 } 735 { 736 std::cmatch m; 737 const char s[] = "01a45cef9"; 738 assert(std::regex_search(s, m, std::regex("[ace1-9]*", 739 std::regex_constants::extended))); 740 assert(m.size() == 1); 741 assert(!m.prefix().matched); 742 assert(m.prefix().first == s); 743 assert(m.prefix().second == m[0].first); 744 assert(m.suffix().matched); 745 assert(m.suffix().first == m[0].second); 746 assert(m.suffix().second == s + std::char_traits<char>::length(s)); 747 assert(m.length(0) == 0); 748 assert(m.position(0) == 0); 749 assert(m.str(0) == ""); 750 } 751 { 752 std::cmatch m; 753 const char s[] = "01a45cef9"; 754 assert(std::regex_search(s, m, std::regex("[ace1-9]+", 755 std::regex_constants::extended))); 756 assert(m.size() == 1); 757 assert(m.prefix().matched); 758 assert(m.prefix().first == s); 759 assert(m.prefix().second == m[0].first); 760 assert(m.suffix().matched); 761 assert(m.suffix().first == m[0].second); 762 assert(m.suffix().second == s + std::char_traits<char>::length(s)); 763 assert(m.length(0) == 6); 764 assert(m.position(0) == 1); 765 assert(m.str(0) == "1a45ce"); 766 } 767 { 768 const char r[] = "^[-+]?[0-9]+[CF]$"; 769 std::ptrdiff_t sr = std::char_traits<char>::length(r); 770 typedef forward_iterator<const char*> FI; 771 typedef bidirectional_iterator<const char*> BI; 772 std::regex regex(FI(r), FI(r+sr), std::regex_constants::extended); 773 std::match_results<BI> m; 774 const char s[] = "-40C"; 775 std::ptrdiff_t ss = std::char_traits<char>::length(s); 776 assert(std::regex_search(BI(s), BI(s+ss), m, regex)); 777 assert(m.size() == 1); 778 assert(!m.prefix().matched); 779 assert(m.prefix().first == BI(s)); 780 assert(m.prefix().second == m[0].first); 781 assert(!m.suffix().matched); 782 assert(m.suffix().first == m[0].second); 783 assert(m.suffix().second == m[0].second); 784 assert(m.length(0) == 4); 785 assert(m.position(0) == 0); 786 assert(m.str(0) == s); 787 } 788 789 { 790 std::wcmatch m; 791 const wchar_t s[] = L"a"; 792 assert(std::regex_search(s, m, std::wregex(L"a", std::regex_constants::extended))); 793 assert(m.size() == 1); 794 assert(!m.empty()); 795 assert(!m.prefix().matched); 796 assert(m.prefix().first == s); 797 assert(m.prefix().second == m[0].first); 798 assert(!m.suffix().matched); 799 assert(m.suffix().first == m[0].second); 800 assert(m.suffix().second == s+1); 801 assert(m.length(0) == 1); 802 assert(m.position(0) == 0); 803 assert(m.str(0) == L"a"); 804 } 805 { 806 std::wcmatch m; 807 const wchar_t s[] = L"ab"; 808 assert(std::regex_search(s, m, std::wregex(L"ab", std::regex_constants::extended))); 809 assert(m.size() == 1); 810 assert(!m.prefix().matched); 811 assert(m.prefix().first == s); 812 assert(m.prefix().second == m[0].first); 813 assert(!m.suffix().matched); 814 assert(m.suffix().first == m[0].second); 815 assert(m.suffix().second == s+2); 816 assert(m.length(0) == 2); 817 assert(m.position(0) == 0); 818 assert(m.str(0) == L"ab"); 819 } 820 { 821 std::wcmatch m; 822 const wchar_t s[] = L"ab"; 823 assert(!std::regex_search(s, m, std::wregex(L"ba", std::regex_constants::extended))); 824 assert(m.size() == 0); 825 assert(m.empty()); 826 } 827 { 828 std::wcmatch m; 829 const wchar_t s[] = L"aab"; 830 assert(std::regex_search(s, m, std::wregex(L"ab", std::regex_constants::extended))); 831 assert(m.size() == 1); 832 assert(m.prefix().matched); 833 assert(m.prefix().first == s); 834 assert(m.prefix().second == m[0].first); 835 assert(!m.suffix().matched); 836 assert(m.suffix().first == m[0].second); 837 assert(m.suffix().second == s+3); 838 assert(m.length(0) == 2); 839 assert(m.position(0) == 1); 840 assert(m.str(0) == L"ab"); 841 } 842 { 843 std::wcmatch m; 844 const wchar_t s[] = L"aab"; 845 assert(!std::regex_search(s, m, std::wregex(L"ab", std::regex_constants::extended), 846 std::regex_constants::match_continuous)); 847 assert(m.size() == 0); 848 } 849 { 850 std::wcmatch m; 851 const wchar_t s[] = L"abcd"; 852 assert(std::regex_search(s, m, std::wregex(L"bc", std::regex_constants::extended))); 853 assert(m.size() == 1); 854 assert(m.prefix().matched); 855 assert(m.prefix().first == s); 856 assert(m.prefix().second == m[0].first); 857 assert(m.suffix().matched); 858 assert(m.suffix().first == m[0].second); 859 assert(m.suffix().second == s+4); 860 assert(m.length(0) == 2); 861 assert(m.position(0) == 1); 862 assert(m.str(0) == L"bc"); 863 } 864 { 865 std::wcmatch m; 866 const wchar_t s[] = L"abbc"; 867 assert(std::regex_search(s, m, std::wregex(L"ab*c", std::regex_constants::extended))); 868 assert(m.size() == 1); 869 assert(!m.prefix().matched); 870 assert(m.prefix().first == s); 871 assert(m.prefix().second == m[0].first); 872 assert(!m.suffix().matched); 873 assert(m.suffix().first == m[0].second); 874 assert(m.suffix().second == s+4); 875 assert(m.length(0) == 4); 876 assert(m.position(0) == 0); 877 assert(m.str(0) == s); 878 } 879 { 880 std::wcmatch m; 881 const wchar_t s[] = L"ababc"; 882 assert(std::regex_search(s, m, std::wregex(L"(ab)*c", std::regex_constants::extended))); 883 assert(m.size() == 2); 884 assert(!m.prefix().matched); 885 assert(m.prefix().first == s); 886 assert(m.prefix().second == m[0].first); 887 assert(!m.suffix().matched); 888 assert(m.suffix().first == m[0].second); 889 assert(m.suffix().second == s+5); 890 assert(m.length(0) == 5); 891 assert(m.position(0) == 0); 892 assert(m.str(0) == s); 893 assert(m.length(1) == 2); 894 assert(m.position(1) == 2); 895 assert(m.str(1) == L"ab"); 896 } 897 { 898 std::wcmatch m; 899 const wchar_t s[] = L"abcdefghijk"; 900 assert(std::regex_search(s, m, std::wregex(L"cd((e)fg)hi", 901 std::regex_constants::extended))); 902 assert(m.size() == 3); 903 assert(m.prefix().matched); 904 assert(m.prefix().first == s); 905 assert(m.prefix().second == m[0].first); 906 assert(m.suffix().matched); 907 assert(m.suffix().first == m[0].second); 908 assert(m.suffix().second == s+std::regex_traits<wchar_t>::length(s)); 909 assert(m.length(0) == 7); 910 assert(m.position(0) == 2); 911 assert(m.str(0) == L"cdefghi"); 912 assert(m.length(1) == 3); 913 assert(m.position(1) == 4); 914 assert(m.str(1) == L"efg"); 915 assert(m.length(2) == 1); 916 assert(m.position(2) == 4); 917 assert(m.str(2) == L"e"); 918 } 919 { 920 std::wcmatch m; 921 const wchar_t s[] = L"abc"; 922 assert(std::regex_search(s, m, std::wregex(L"^abc", std::regex_constants::extended))); 923 assert(m.size() == 1); 924 assert(!m.prefix().matched); 925 assert(m.prefix().first == s); 926 assert(m.prefix().second == m[0].first); 927 assert(!m.suffix().matched); 928 assert(m.suffix().first == m[0].second); 929 assert(m.suffix().second == s+3); 930 assert(m.length(0) == 3); 931 assert(m.position(0) == 0); 932 assert(m.str(0) == s); 933 } 934 { 935 std::wcmatch m; 936 const wchar_t s[] = L"abcd"; 937 assert(std::regex_search(s, m, std::wregex(L"^abc", std::regex_constants::extended))); 938 assert(m.size() == 1); 939 assert(!m.prefix().matched); 940 assert(m.prefix().first == s); 941 assert(m.prefix().second == m[0].first); 942 assert(m.suffix().matched); 943 assert(m.suffix().first == m[0].second); 944 assert(m.suffix().second == s+4); 945 assert(m.length(0) == 3); 946 assert(m.position(0) == 0); 947 assert(m.str(0) == L"abc"); 948 } 949 { 950 std::wcmatch m; 951 const wchar_t s[] = L"aabc"; 952 assert(!std::regex_search(s, m, std::wregex(L"^abc", std::regex_constants::extended))); 953 assert(m.size() == 0); 954 } 955 { 956 std::wcmatch m; 957 const wchar_t s[] = L"abc"; 958 assert(std::regex_search(s, m, std::wregex(L"abc$", std::regex_constants::extended))); 959 assert(m.size() == 1); 960 assert(!m.prefix().matched); 961 assert(m.prefix().first == s); 962 assert(m.prefix().second == m[0].first); 963 assert(!m.suffix().matched); 964 assert(m.suffix().first == m[0].second); 965 assert(m.suffix().second == s+3); 966 assert(m.length(0) == 3); 967 assert(m.position(0) == 0); 968 assert(m.str(0) == s); 969 } 970 { 971 std::wcmatch m; 972 const wchar_t s[] = L"efabc"; 973 assert(std::regex_search(s, m, std::wregex(L"abc$", std::regex_constants::extended))); 974 assert(m.size() == 1); 975 assert(m.prefix().matched); 976 assert(m.prefix().first == s); 977 assert(m.prefix().second == m[0].first); 978 assert(!m.suffix().matched); 979 assert(m.suffix().first == m[0].second); 980 assert(m.suffix().second == s+5); 981 assert(m.length(0) == 3); 982 assert(m.position(0) == 2); 983 assert(m.str(0) == s+2); 984 } 985 { 986 std::wcmatch m; 987 const wchar_t s[] = L"efabcg"; 988 assert(!std::regex_search(s, m, std::wregex(L"abc$", std::regex_constants::extended))); 989 assert(m.size() == 0); 990 } 991 { 992 std::wcmatch m; 993 const wchar_t s[] = L"abc"; 994 assert(std::regex_search(s, m, std::wregex(L"a.c", std::regex_constants::extended))); 995 assert(m.size() == 1); 996 assert(!m.prefix().matched); 997 assert(m.prefix().first == s); 998 assert(m.prefix().second == m[0].first); 999 assert(!m.suffix().matched); 1000 assert(m.suffix().first == m[0].second); 1001 assert(m.suffix().second == s+3); 1002 assert(m.length(0) == 3); 1003 assert(m.position(0) == 0); 1004 assert(m.str(0) == s); 1005 } 1006 { 1007 std::wcmatch m; 1008 const wchar_t s[] = L"acc"; 1009 assert(std::regex_search(s, m, std::wregex(L"a.c", std::regex_constants::extended))); 1010 assert(m.size() == 1); 1011 assert(!m.prefix().matched); 1012 assert(m.prefix().first == s); 1013 assert(m.prefix().second == m[0].first); 1014 assert(!m.suffix().matched); 1015 assert(m.suffix().first == m[0].second); 1016 assert(m.suffix().second == s+3); 1017 assert(m.length(0) == 3); 1018 assert(m.position(0) == 0); 1019 assert(m.str(0) == s); 1020 } 1021 { 1022 std::wcmatch m; 1023 const wchar_t s[] = L"acc"; 1024 assert(std::regex_search(s, m, std::wregex(L"a.c", std::regex_constants::extended))); 1025 assert(m.size() == 1); 1026 assert(!m.prefix().matched); 1027 assert(m.prefix().first == s); 1028 assert(m.prefix().second == m[0].first); 1029 assert(!m.suffix().matched); 1030 assert(m.suffix().first == m[0].second); 1031 assert(m.suffix().second == s+3); 1032 assert(m.length(0) == 3); 1033 assert(m.position(0) == 0); 1034 assert(m.str(0) == s); 1035 } 1036 { 1037 std::wcmatch m; 1038 const wchar_t s[] = L"abcdef"; 1039 assert(std::regex_search(s, m, std::wregex(L"(.*).*", std::regex_constants::extended))); 1040 assert(m.size() == 2); 1041 assert(!m.prefix().matched); 1042 assert(m.prefix().first == s); 1043 assert(m.prefix().second == m[0].first); 1044 assert(!m.suffix().matched); 1045 assert(m.suffix().first == m[0].second); 1046 assert(m.suffix().second == s+6); 1047 assert(m.length(0) == 6); 1048 assert(m.position(0) == 0); 1049 assert(m.str(0) == s); 1050 assert(m.length(1) == 6); 1051 assert(m.position(1) == 0); 1052 assert(m.str(1) == s); 1053 } 1054 { 1055 std::wcmatch m; 1056 const wchar_t s[] = L"bc"; 1057 assert(std::regex_search(s, m, std::wregex(L"(a*)*", std::regex_constants::extended))); 1058 assert(m.size() == 2); 1059 assert(!m.prefix().matched); 1060 assert(m.prefix().first == s); 1061 assert(m.prefix().second == m[0].first); 1062 assert(m.suffix().matched); 1063 assert(m.suffix().first == m[0].second); 1064 assert(m.suffix().second == s+2); 1065 assert(m.length(0) == 0); 1066 assert(m.position(0) == 0); 1067 assert(m.str(0) == L""); 1068 assert(m.length(1) == 0); 1069 assert(m.position(1) == 0); 1070 assert(m.str(1) == L""); 1071 } 1072 { 1073 std::wcmatch m; 1074 const wchar_t s[] = L"abbc"; 1075 assert(!std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::extended))); 1076 assert(m.size() == 0); 1077 } 1078 { 1079 std::wcmatch m; 1080 const wchar_t s[] = L"abbbc"; 1081 assert(std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::extended))); 1082 assert(m.size() == 1); 1083 assert(!m.prefix().matched); 1084 assert(m.prefix().first == s); 1085 assert(m.prefix().second == m[0].first); 1086 assert(!m.suffix().matched); 1087 assert(m.suffix().first == m[0].second); 1088 assert(m.suffix().second == m[0].second); 1089 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1090 assert(m.position(0) == 0); 1091 assert(m.str(0) == s); 1092 } 1093 { 1094 std::wcmatch m; 1095 const wchar_t s[] = L"abbbbc"; 1096 assert(std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::extended))); 1097 assert(m.size() == 1); 1098 assert(!m.prefix().matched); 1099 assert(m.prefix().first == s); 1100 assert(m.prefix().second == m[0].first); 1101 assert(!m.suffix().matched); 1102 assert(m.suffix().first == m[0].second); 1103 assert(m.suffix().second == m[0].second); 1104 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1105 assert(m.position(0) == 0); 1106 assert(m.str(0) == s); 1107 } 1108 { 1109 std::wcmatch m; 1110 const wchar_t s[] = L"abbbbbc"; 1111 assert(std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::extended))); 1112 assert(m.size() == 1); 1113 assert(!m.prefix().matched); 1114 assert(m.prefix().first == s); 1115 assert(m.prefix().second == m[0].first); 1116 assert(!m.suffix().matched); 1117 assert(m.suffix().first == m[0].second); 1118 assert(m.suffix().second == m[0].second); 1119 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1120 assert(m.position(0) == 0); 1121 assert(m.str(0) == s); 1122 } 1123 { 1124 std::wcmatch m; 1125 const wchar_t s[] = L"adefc"; 1126 assert(!std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::extended))); 1127 assert(m.size() == 0); 1128 } 1129 { 1130 std::wcmatch m; 1131 const wchar_t s[] = L"abbbbbbc"; 1132 assert(!std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::extended))); 1133 assert(m.size() == 0); 1134 } 1135 { 1136 std::wcmatch m; 1137 const wchar_t s[] = L"adec"; 1138 assert(!std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::extended))); 1139 assert(m.size() == 0); 1140 } 1141 { 1142 std::wcmatch m; 1143 const wchar_t s[] = L"adefc"; 1144 assert(std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::extended))); 1145 assert(m.size() == 1); 1146 assert(!m.prefix().matched); 1147 assert(m.prefix().first == s); 1148 assert(m.prefix().second == m[0].first); 1149 assert(!m.suffix().matched); 1150 assert(m.suffix().first == m[0].second); 1151 assert(m.suffix().second == m[0].second); 1152 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1153 assert(m.position(0) == 0); 1154 assert(m.str(0) == s); 1155 } 1156 { 1157 std::wcmatch m; 1158 const wchar_t s[] = L"adefgc"; 1159 assert(std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::extended))); 1160 assert(m.size() == 1); 1161 assert(!m.prefix().matched); 1162 assert(m.prefix().first == s); 1163 assert(m.prefix().second == m[0].first); 1164 assert(!m.suffix().matched); 1165 assert(m.suffix().first == m[0].second); 1166 assert(m.suffix().second == m[0].second); 1167 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1168 assert(m.position(0) == 0); 1169 assert(m.str(0) == s); 1170 } 1171 { 1172 std::wcmatch m; 1173 const wchar_t s[] = L"adefghc"; 1174 assert(std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::extended))); 1175 assert(m.size() == 1); 1176 assert(!m.prefix().matched); 1177 assert(m.prefix().first == s); 1178 assert(m.prefix().second == m[0].first); 1179 assert(!m.suffix().matched); 1180 assert(m.suffix().first == m[0].second); 1181 assert(m.suffix().second == m[0].second); 1182 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1183 assert(m.position(0) == 0); 1184 assert(m.str(0) == s); 1185 } 1186 { 1187 std::wcmatch m; 1188 const wchar_t s[] = L"adefghic"; 1189 assert(!std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::extended))); 1190 assert(m.size() == 0); 1191 } 1192 { 1193 std::wcmatch m; 1194 const wchar_t s[] = L"tournament"; 1195 assert(std::regex_search(s, m, std::wregex(L"tour|to|tournament", 1196 std::regex_constants::extended))); 1197 assert(m.size() == 1); 1198 assert(!m.prefix().matched); 1199 assert(m.prefix().first == s); 1200 assert(m.prefix().second == m[0].first); 1201 assert(!m.suffix().matched); 1202 assert(m.suffix().first == m[0].second); 1203 assert(m.suffix().second == m[0].second); 1204 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1205 assert(m.position(0) == 0); 1206 assert(m.str(0) == s); 1207 } 1208 { 1209 std::wcmatch m; 1210 const wchar_t s[] = L"tournamenttotour"; 1211 assert(std::regex_search(s, m, std::wregex(L"(tour|to|tournament)+", 1212 std::regex_constants::extended | std::regex_constants::nosubs))); 1213 assert(m.size() == 1); 1214 assert(!m.prefix().matched); 1215 assert(m.prefix().first == s); 1216 assert(m.prefix().second == m[0].first); 1217 assert(!m.suffix().matched); 1218 assert(m.suffix().first == m[0].second); 1219 assert(m.suffix().second == m[0].second); 1220 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1221 assert(m.position(0) == 0); 1222 assert(m.str(0) == s); 1223 } 1224 { 1225 std::wcmatch m; 1226 const wchar_t s[] = L"ttotour"; 1227 assert(std::regex_search(s, m, std::wregex(L"(tour|to|t)+", 1228 std::regex_constants::extended))); 1229 assert(m.size() == 2); 1230 assert(!m.prefix().matched); 1231 assert(m.prefix().first == s); 1232 assert(m.prefix().second == m[0].first); 1233 assert(!m.suffix().matched); 1234 assert(m.suffix().first == m[0].second); 1235 assert(m.suffix().second == m[0].second); 1236 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1237 assert(m.position(0) == 0); 1238 assert(m.str(0) == s); 1239 assert(m.length(1) == 4); 1240 assert(m.position(1) == 3); 1241 assert(m.str(1) == L"tour"); 1242 } 1243 { 1244 std::wcmatch m; 1245 const wchar_t s[] = L"-ab,ab-"; 1246 assert(!std::regex_search(s, m, std::wregex(L"-(.*),\1-", std::regex_constants::extended))); 1247 assert(m.size() == 0); 1248 } 1249 { 1250 std::wcmatch m; 1251 const wchar_t s[] = L"-ab,ab-"; 1252 assert(std::regex_search(s, m, std::wregex(L"-.*,.*-", std::regex_constants::extended))); 1253 assert(m.size() == 1); 1254 assert(!m.prefix().matched); 1255 assert(m.prefix().first == s); 1256 assert(m.prefix().second == m[0].first); 1257 assert(!m.suffix().matched); 1258 assert(m.suffix().first == m[0].second); 1259 assert(m.suffix().second == m[0].second); 1260 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1261 assert(m.position(0) == 0); 1262 assert(m.str(0) == s); 1263 } 1264 { 1265 std::wcmatch m; 1266 const wchar_t s[] = L"a"; 1267 assert(std::regex_search(s, m, std::wregex(L"^[a]$", 1268 std::regex_constants::extended))); 1269 assert(m.size() == 1); 1270 assert(!m.prefix().matched); 1271 assert(m.prefix().first == s); 1272 assert(m.prefix().second == m[0].first); 1273 assert(!m.suffix().matched); 1274 assert(m.suffix().first == m[0].second); 1275 assert(m.suffix().second == m[0].second); 1276 assert(m.length(0) == 1); 1277 assert(m.position(0) == 0); 1278 assert(m.str(0) == L"a"); 1279 } 1280 { 1281 std::wcmatch m; 1282 const wchar_t s[] = L"a"; 1283 assert(std::regex_search(s, m, std::wregex(L"^[ab]$", 1284 std::regex_constants::extended))); 1285 assert(m.size() == 1); 1286 assert(!m.prefix().matched); 1287 assert(m.prefix().first == s); 1288 assert(m.prefix().second == m[0].first); 1289 assert(!m.suffix().matched); 1290 assert(m.suffix().first == m[0].second); 1291 assert(m.suffix().second == m[0].second); 1292 assert(m.length(0) == 1); 1293 assert(m.position(0) == 0); 1294 assert(m.str(0) == L"a"); 1295 } 1296 { 1297 std::wcmatch m; 1298 const wchar_t s[] = L"c"; 1299 assert(std::regex_search(s, m, std::wregex(L"^[a-f]$", 1300 std::regex_constants::extended))); 1301 assert(m.size() == 1); 1302 assert(!m.prefix().matched); 1303 assert(m.prefix().first == s); 1304 assert(m.prefix().second == m[0].first); 1305 assert(!m.suffix().matched); 1306 assert(m.suffix().first == m[0].second); 1307 assert(m.suffix().second == m[0].second); 1308 assert(m.length(0) == 1); 1309 assert(m.position(0) == 0); 1310 assert(m.str(0) == s); 1311 } 1312 { 1313 std::wcmatch m; 1314 const wchar_t s[] = L"g"; 1315 assert(!std::regex_search(s, m, std::wregex(L"^[a-f]$", 1316 std::regex_constants::extended))); 1317 assert(m.size() == 0); 1318 } 1319 { 1320 std::wcmatch m; 1321 const wchar_t s[] = L"Iraqi"; 1322 assert(std::regex_search(s, m, std::wregex(L"q[^u]", 1323 std::regex_constants::extended))); 1324 assert(m.size() == 1); 1325 assert(m.prefix().matched); 1326 assert(m.prefix().first == s); 1327 assert(m.prefix().second == m[0].first); 1328 assert(!m.suffix().matched); 1329 assert(m.suffix().first == m[0].second); 1330 assert(m.suffix().second == m[0].second); 1331 assert(m.length(0) == 2); 1332 assert(m.position(0) == 3); 1333 assert(m.str(0) == L"qi"); 1334 } 1335 { 1336 std::wcmatch m; 1337 const wchar_t s[] = L"Iraq"; 1338 assert(!std::regex_search(s, m, std::wregex(L"q[^u]", 1339 std::regex_constants::extended))); 1340 assert(m.size() == 0); 1341 } 1342 { 1343 std::wcmatch m; 1344 const wchar_t s[] = L"AmB"; 1345 assert(std::regex_search(s, m, std::wregex(L"A[[:lower:]]B", 1346 std::regex_constants::extended))); 1347 assert(m.size() == 1); 1348 assert(!m.prefix().matched); 1349 assert(m.prefix().first == s); 1350 assert(m.prefix().second == m[0].first); 1351 assert(!m.suffix().matched); 1352 assert(m.suffix().first == m[0].second); 1353 assert(m.suffix().second == m[0].second); 1354 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1355 assert(m.position(0) == 0); 1356 assert(m.str(0) == s); 1357 } 1358 { 1359 std::wcmatch m; 1360 const wchar_t s[] = L"AMB"; 1361 assert(!std::regex_search(s, m, std::wregex(L"A[[:lower:]]B", 1362 std::regex_constants::extended))); 1363 assert(m.size() == 0); 1364 } 1365 { 1366 std::wcmatch m; 1367 const wchar_t s[] = L"AMB"; 1368 assert(std::regex_search(s, m, std::wregex(L"A[^[:lower:]]B", 1369 std::regex_constants::extended))); 1370 assert(m.size() == 1); 1371 assert(!m.prefix().matched); 1372 assert(m.prefix().first == s); 1373 assert(m.prefix().second == m[0].first); 1374 assert(!m.suffix().matched); 1375 assert(m.suffix().first == m[0].second); 1376 assert(m.suffix().second == m[0].second); 1377 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1378 assert(m.position(0) == 0); 1379 assert(m.str(0) == s); 1380 } 1381 { 1382 std::wcmatch m; 1383 const wchar_t s[] = L"AmB"; 1384 assert(!std::regex_search(s, m, std::wregex(L"A[^[:lower:]]B", 1385 std::regex_constants::extended))); 1386 assert(m.size() == 0); 1387 } 1388 { 1389 std::wcmatch m; 1390 const wchar_t s[] = L"A5B"; 1391 assert(!std::regex_search(s, m, std::wregex(L"A[^[:lower:]0-9]B", 1392 std::regex_constants::extended))); 1393 assert(m.size() == 0); 1394 } 1395 { 1396 std::wcmatch m; 1397 const wchar_t s[] = L"A?B"; 1398 assert(std::regex_search(s, m, std::wregex(L"A[^[:lower:]0-9]B", 1399 std::regex_constants::extended))); 1400 assert(m.size() == 1); 1401 assert(!m.prefix().matched); 1402 assert(m.prefix().first == s); 1403 assert(m.prefix().second == m[0].first); 1404 assert(!m.suffix().matched); 1405 assert(m.suffix().first == m[0].second); 1406 assert(m.suffix().second == m[0].second); 1407 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1408 assert(m.position(0) == 0); 1409 assert(m.str(0) == s); 1410 } 1411 { 1412 std::wcmatch m; 1413 const wchar_t s[] = L"-"; 1414 assert(std::regex_search(s, m, std::wregex(L"[a[.hyphen.]z]", 1415 std::regex_constants::extended))); 1416 assert(m.size() == 1); 1417 assert(!m.prefix().matched); 1418 assert(m.prefix().first == s); 1419 assert(m.prefix().second == m[0].first); 1420 assert(!m.suffix().matched); 1421 assert(m.suffix().first == m[0].second); 1422 assert(m.suffix().second == m[0].second); 1423 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1424 assert(m.position(0) == 0); 1425 assert(m.str(0) == s); 1426 } 1427 { 1428 std::wcmatch m; 1429 const wchar_t s[] = L"z"; 1430 assert(std::regex_search(s, m, std::wregex(L"[a[.hyphen.]z]", 1431 std::regex_constants::extended))); 1432 assert(m.size() == 1); 1433 assert(!m.prefix().matched); 1434 assert(m.prefix().first == s); 1435 assert(m.prefix().second == m[0].first); 1436 assert(!m.suffix().matched); 1437 assert(m.suffix().first == m[0].second); 1438 assert(m.suffix().second == m[0].second); 1439 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1440 assert(m.position(0) == 0); 1441 assert(m.str(0) == s); 1442 } 1443 { 1444 std::wcmatch m; 1445 const wchar_t s[] = L"m"; 1446 assert(!std::regex_search(s, m, std::wregex(L"[a[.hyphen.]z]", 1447 std::regex_constants::extended))); 1448 assert(m.size() == 0); 1449 } 1450 std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2)); 1451 { 1452 std::wcmatch m; 1453 const wchar_t s[] = L"m"; 1454 assert(std::regex_search(s, m, std::wregex(L"[a[=M=]z]", 1455 std::regex_constants::extended))); 1456 assert(m.size() == 1); 1457 assert(!m.prefix().matched); 1458 assert(m.prefix().first == s); 1459 assert(m.prefix().second == m[0].first); 1460 assert(!m.suffix().matched); 1461 assert(m.suffix().first == m[0].second); 1462 assert(m.suffix().second == m[0].second); 1463 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1464 assert(m.position(0) == 0); 1465 assert(m.str(0) == s); 1466 } 1467 { 1468 std::wcmatch m; 1469 const wchar_t s[] = L"Ch"; 1470 assert(std::regex_search(s, m, std::wregex(L"[a[.ch.]z]", 1471 std::regex_constants::extended | std::regex_constants::icase))); 1472 assert(m.size() == 1); 1473 assert(!m.prefix().matched); 1474 assert(m.prefix().first == s); 1475 assert(m.prefix().second == m[0].first); 1476 assert(!m.suffix().matched); 1477 assert(m.suffix().first == m[0].second); 1478 assert(m.suffix().second == m[0].second); 1479 assert(m.length(0) >= 0 && static_cast<size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s)); 1480 assert(m.position(0) == 0); 1481 assert(m.str(0) == s); 1482 } 1483 std::locale::global(std::locale("C")); 1484 { 1485 std::wcmatch m; 1486 const wchar_t s[] = L"m"; 1487 assert(!std::regex_search(s, m, std::wregex(L"[a[=M=]z]", 1488 std::regex_constants::extended))); 1489 assert(m.size() == 0); 1490 } 1491 { 1492 std::wcmatch m; 1493 const wchar_t s[] = L"01a45cef9"; 1494 assert(std::regex_search(s, m, std::wregex(L"[ace1-9]*", 1495 std::regex_constants::extended))); 1496 assert(m.size() == 1); 1497 assert(!m.prefix().matched); 1498 assert(m.prefix().first == s); 1499 assert(m.prefix().second == m[0].first); 1500 assert(m.suffix().matched); 1501 assert(m.suffix().first == m[0].second); 1502 assert(m.suffix().second == s + std::char_traits<wchar_t>::length(s)); 1503 assert(m.length(0) == 0); 1504 assert(m.position(0) == 0); 1505 assert(m.str(0) == L""); 1506 } 1507 { 1508 std::wcmatch m; 1509 const wchar_t s[] = L"01a45cef9"; 1510 assert(std::regex_search(s, m, std::wregex(L"[ace1-9]+", 1511 std::regex_constants::extended))); 1512 assert(m.size() == 1); 1513 assert(m.prefix().matched); 1514 assert(m.prefix().first == s); 1515 assert(m.prefix().second == m[0].first); 1516 assert(m.suffix().matched); 1517 assert(m.suffix().first == m[0].second); 1518 assert(m.suffix().second == s + std::char_traits<wchar_t>::length(s)); 1519 assert(m.length(0) == 6); 1520 assert(m.position(0) == 1); 1521 assert(m.str(0) == L"1a45ce"); 1522 } 1523 { 1524 const wchar_t r[] = L"^[-+]?[0-9]+[CF]$"; 1525 std::ptrdiff_t sr = std::char_traits<wchar_t>::length(r); 1526 typedef forward_iterator<const wchar_t*> FI; 1527 typedef bidirectional_iterator<const wchar_t*> BI; 1528 std::wregex regex(FI(r), FI(r+sr), std::regex_constants::extended); 1529 std::match_results<BI> m; 1530 const wchar_t s[] = L"-40C"; 1531 std::ptrdiff_t ss = std::char_traits<wchar_t>::length(s); 1532 assert(std::regex_search(BI(s), BI(s+ss), m, regex)); 1533 assert(m.size() == 1); 1534 assert(!m.prefix().matched); 1535 assert(m.prefix().first == BI(s)); 1536 assert(m.prefix().second == m[0].first); 1537 assert(!m.suffix().matched); 1538 assert(m.suffix().first == m[0].second); 1539 assert(m.suffix().second == m[0].second); 1540 assert(m.length(0) == 4); 1541 assert(m.position(0) == 0); 1542 assert(m.str(0) == s); 1543 } 1544 } 1545