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