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