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