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