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