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