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