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