1538 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9 10// <regex>11 12// template <class BidirectionalIterator, class Allocator, class charT, class traits>13// bool14// 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#include "test_macros.h"22#include "test_iterators.h"23 24int main(int, char**)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) >= 0 && static_cast<std::size_t>(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) >= 0 && static_cast<std::size_t>(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) >= 0 && static_cast<std::size_t>(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) >= 0 && static_cast<std::size_t>(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) >= 0 && static_cast<std::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[] = "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) >= 0 && static_cast<std::size_t>(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) >= 0 && static_cast<std::size_t>(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) >= 0 && static_cast<std::size_t>(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) >= 0 && static_cast<std::size_t>(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) >= 0 && static_cast<std::size_t>(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) >= 0 && static_cast<std::size_t>(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) >= 0 && static_cast<std::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[] = "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) >= 0 && static_cast<std::size_t>(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[] = "m";651 assert(std::regex_search(s, m, std::regex("[a[=m=]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) >= 0 && static_cast<std::size_t>(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[] = "m";667 assert(!std::regex_search(s, m, std::regex("[a[=M=]z]",668 std::regex_constants::awk)));669 assert(m.size() == 0);670 }671 {672 std::cmatch m;673 const char s[] = "-";674 assert(std::regex_search(s, m, std::regex("[a[.hyphen.]z]",675 std::regex_constants::awk)));676 assert(m.size() == 1);677 assert(!m.prefix().matched);678 assert(m.prefix().first == s);679 assert(m.prefix().second == m[0].first);680 assert(!m.suffix().matched);681 assert(m.suffix().first == m[0].second);682 assert(m.suffix().second == m[0].second);683 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));684 assert(m.position(0) == 0);685 assert(m.str(0) == s);686 }687 {688 std::cmatch m;689 const char s[] = "z";690 assert(std::regex_search(s, m, std::regex("[a[.hyphen.]z]",691 std::regex_constants::awk)));692 assert(m.size() == 1);693 assert(!m.prefix().matched);694 assert(m.prefix().first == s);695 assert(m.prefix().second == m[0].first);696 assert(!m.suffix().matched);697 assert(m.suffix().first == m[0].second);698 assert(m.suffix().second == m[0].second);699 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));700 assert(m.position(0) == 0);701 assert(m.str(0) == s);702 }703 {704 std::cmatch m;705 const char s[] = "m";706 assert(!std::regex_search(s, m, std::regex("[a[.hyphen.]z]",707 std::regex_constants::awk)));708 assert(m.size() == 0);709 }710 {711 std::cmatch m;712 const char s[] = "01a45cef9";713 assert(std::regex_search(s, m, std::regex("[ace1-9]*",714 std::regex_constants::awk)));715 assert(m.size() == 1);716 assert(!m.prefix().matched);717 assert(m.prefix().first == s);718 assert(m.prefix().second == m[0].first);719 assert(m.suffix().matched);720 assert(m.suffix().first == m[0].second);721 assert(m.suffix().second == s + std::char_traits<char>::length(s));722 assert(m.length(0) == 0);723 assert(m.position(0) == 0);724 assert(m.str(0) == "");725 }726 {727 std::cmatch m;728 const char s[] = "01a45cef9";729 assert(std::regex_search(s, m, std::regex("[ace1-9]+",730 std::regex_constants::awk)));731 assert(m.size() == 1);732 assert(m.prefix().matched);733 assert(m.prefix().first == s);734 assert(m.prefix().second == m[0].first);735 assert(m.suffix().matched);736 assert(m.suffix().first == m[0].second);737 assert(m.suffix().second == s + std::char_traits<char>::length(s));738 assert(m.length(0) == 6);739 assert(m.position(0) == 1);740 assert(m.str(0) == "1a45ce");741 }742 {743 const char r[] = "^[-+]?[0-9]+[CF]$";744 std::ptrdiff_t sr = std::char_traits<char>::length(r);745 typedef forward_iterator<const char*> FI;746 typedef bidirectional_iterator<const char*> BI;747 std::regex regex(FI(r), FI(r+sr), std::regex_constants::awk);748 std::match_results<BI> m;749 const char s[] = "-40C";750 std::ptrdiff_t ss = std::char_traits<char>::length(s);751 assert(std::regex_search(BI(s), BI(s+ss), m, regex));752 assert(m.size() == 1);753 assert(!m.prefix().matched);754 assert(m.prefix().first == BI(s));755 assert(m.prefix().second == m[0].first);756 assert(!m.suffix().matched);757 assert(m.suffix().first == m[0].second);758 assert(m.suffix().second == m[0].second);759 assert(m.length(0) == 4);760 assert(m.position(0) == 0);761 assert(m.str(0) == s);762 }763 {764 std::cmatch m;765 const char s[] = "\n\n\n";766 assert(std::regex_search(s, m, std::regex("[\\n]+",767 std::regex_constants::awk)));768 assert(m.size() == 1);769 assert(!m.prefix().matched);770 assert(m.prefix().first == s);771 assert(m.prefix().second == m[0].first);772 assert(!m.suffix().matched);773 assert(m.suffix().first == m[0].second);774 assert(m.suffix().second == s + std::char_traits<char>::length(s));775 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));776 assert(m.position(0) == 0);777 assert(m.str(0) == s);778 }779 780#ifndef TEST_HAS_NO_WIDE_CHARACTERS781 {782 std::wcmatch m;783 const wchar_t s[] = L"a";784 assert(std::regex_search(s, m, std::wregex(L"a", std::regex_constants::awk)));785 assert(m.size() == 1);786 assert(!m.empty());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+1);793 assert(m.length(0) == 1);794 assert(m.position(0) == 0);795 assert(m.str(0) == L"a");796 }797 {798 std::wcmatch m;799 const wchar_t s[] = L"ab";800 assert(std::regex_search(s, m, std::wregex(L"ab", std::regex_constants::awk)));801 assert(m.size() == 1);802 assert(!m.prefix().matched);803 assert(m.prefix().first == s);804 assert(m.prefix().second == m[0].first);805 assert(!m.suffix().matched);806 assert(m.suffix().first == m[0].second);807 assert(m.suffix().second == s+2);808 assert(m.length(0) == 2);809 assert(m.position(0) == 0);810 assert(m.str(0) == L"ab");811 }812 {813 std::wcmatch m;814 const wchar_t s[] = L"ab";815 assert(!std::regex_search(s, m, std::wregex(L"ba", std::regex_constants::awk)));816 assert(m.size() == 0);817 assert(m.empty());818 }819 {820 std::wcmatch m;821 const wchar_t s[] = L"aab";822 assert(std::regex_search(s, m, std::wregex(L"ab", std::regex_constants::awk)));823 assert(m.size() == 1);824 assert(m.prefix().matched);825 assert(m.prefix().first == s);826 assert(m.prefix().second == m[0].first);827 assert(!m.suffix().matched);828 assert(m.suffix().first == m[0].second);829 assert(m.suffix().second == s+3);830 assert(m.length(0) == 2);831 assert(m.position(0) == 1);832 assert(m.str(0) == L"ab");833 }834 {835 std::wcmatch m;836 const wchar_t s[] = L"aab";837 assert(!std::regex_search(s, m, std::wregex(L"ab", std::regex_constants::awk),838 std::regex_constants::match_continuous));839 assert(m.size() == 0);840 }841 {842 std::wcmatch m;843 const wchar_t s[] = L"abcd";844 assert(std::regex_search(s, m, std::wregex(L"bc", std::regex_constants::awk)));845 assert(m.size() == 1);846 assert(m.prefix().matched);847 assert(m.prefix().first == s);848 assert(m.prefix().second == m[0].first);849 assert(m.suffix().matched);850 assert(m.suffix().first == m[0].second);851 assert(m.suffix().second == s+4);852 assert(m.length(0) == 2);853 assert(m.position(0) == 1);854 assert(m.str(0) == L"bc");855 }856 {857 std::wcmatch m;858 const wchar_t s[] = L"abbc";859 assert(std::regex_search(s, m, std::wregex(L"ab*c", std::regex_constants::awk)));860 assert(m.size() == 1);861 assert(!m.prefix().matched);862 assert(m.prefix().first == s);863 assert(m.prefix().second == m[0].first);864 assert(!m.suffix().matched);865 assert(m.suffix().first == m[0].second);866 assert(m.suffix().second == s+4);867 assert(m.length(0) == 4);868 assert(m.position(0) == 0);869 assert(m.str(0) == s);870 }871 {872 std::wcmatch m;873 const wchar_t s[] = L"ababc";874 assert(std::regex_search(s, m, std::wregex(L"(ab)*c", std::regex_constants::awk)));875 assert(m.size() == 2);876 assert(!m.prefix().matched);877 assert(m.prefix().first == s);878 assert(m.prefix().second == m[0].first);879 assert(!m.suffix().matched);880 assert(m.suffix().first == m[0].second);881 assert(m.suffix().second == s+5);882 assert(m.length(0) == 5);883 assert(m.position(0) == 0);884 assert(m.str(0) == s);885 assert(m.length(1) == 2);886 assert(m.position(1) == 2);887 assert(m.str(1) == L"ab");888 }889 {890 std::wcmatch m;891 const wchar_t s[] = L"abcdefghijk";892 assert(std::regex_search(s, m, std::wregex(L"cd((e)fg)hi",893 std::regex_constants::awk)));894 assert(m.size() == 3);895 assert(m.prefix().matched);896 assert(m.prefix().first == s);897 assert(m.prefix().second == m[0].first);898 assert(m.suffix().matched);899 assert(m.suffix().first == m[0].second);900 assert(m.suffix().second == s+std::regex_traits<wchar_t>::length(s));901 assert(m.length(0) == 7);902 assert(m.position(0) == 2);903 assert(m.str(0) == L"cdefghi");904 assert(m.length(1) == 3);905 assert(m.position(1) == 4);906 assert(m.str(1) == L"efg");907 assert(m.length(2) == 1);908 assert(m.position(2) == 4);909 assert(m.str(2) == L"e");910 }911 {912 std::wcmatch m;913 const wchar_t s[] = L"abc";914 assert(std::regex_search(s, m, std::wregex(L"^abc", std::regex_constants::awk)));915 assert(m.size() == 1);916 assert(!m.prefix().matched);917 assert(m.prefix().first == s);918 assert(m.prefix().second == m[0].first);919 assert(!m.suffix().matched);920 assert(m.suffix().first == m[0].second);921 assert(m.suffix().second == s+3);922 assert(m.length(0) == 3);923 assert(m.position(0) == 0);924 assert(m.str(0) == s);925 }926 {927 std::wcmatch m;928 const wchar_t s[] = L"abcd";929 assert(std::regex_search(s, m, std::wregex(L"^abc", std::regex_constants::awk)));930 assert(m.size() == 1);931 assert(!m.prefix().matched);932 assert(m.prefix().first == s);933 assert(m.prefix().second == m[0].first);934 assert(m.suffix().matched);935 assert(m.suffix().first == m[0].second);936 assert(m.suffix().second == s+4);937 assert(m.length(0) == 3);938 assert(m.position(0) == 0);939 assert(m.str(0) == L"abc");940 }941 {942 std::wcmatch m;943 const wchar_t s[] = L"aabc";944 assert(!std::regex_search(s, m, std::wregex(L"^abc", std::regex_constants::awk)));945 assert(m.size() == 0);946 }947 {948 std::wcmatch m;949 const wchar_t s[] = L"abc";950 assert(std::regex_search(s, m, std::wregex(L"abc$", std::regex_constants::awk)));951 assert(m.size() == 1);952 assert(!m.prefix().matched);953 assert(m.prefix().first == s);954 assert(m.prefix().second == m[0].first);955 assert(!m.suffix().matched);956 assert(m.suffix().first == m[0].second);957 assert(m.suffix().second == s+3);958 assert(m.length(0) == 3);959 assert(m.position(0) == 0);960 assert(m.str(0) == s);961 }962 {963 std::wcmatch m;964 const wchar_t s[] = L"efabc";965 assert(std::regex_search(s, m, std::wregex(L"abc$", std::regex_constants::awk)));966 assert(m.size() == 1);967 assert(m.prefix().matched);968 assert(m.prefix().first == s);969 assert(m.prefix().second == m[0].first);970 assert(!m.suffix().matched);971 assert(m.suffix().first == m[0].second);972 assert(m.suffix().second == s+5);973 assert(m.length(0) == 3);974 assert(m.position(0) == 2);975 assert(m.str(0) == s+2);976 }977 {978 std::wcmatch m;979 const wchar_t s[] = L"efabcg";980 assert(!std::regex_search(s, m, std::wregex(L"abc$", std::regex_constants::awk)));981 assert(m.size() == 0);982 }983 {984 std::wcmatch m;985 const wchar_t s[] = L"abc";986 assert(std::regex_search(s, m, std::wregex(L"a.c", std::regex_constants::awk)));987 assert(m.size() == 1);988 assert(!m.prefix().matched);989 assert(m.prefix().first == s);990 assert(m.prefix().second == m[0].first);991 assert(!m.suffix().matched);992 assert(m.suffix().first == m[0].second);993 assert(m.suffix().second == s+3);994 assert(m.length(0) == 3);995 assert(m.position(0) == 0);996 assert(m.str(0) == s);997 }998 {999 std::wcmatch m;1000 const wchar_t s[] = L"acc";1001 assert(std::regex_search(s, m, std::wregex(L"a.c", std::regex_constants::awk)));1002 assert(m.size() == 1);1003 assert(!m.prefix().matched);1004 assert(m.prefix().first == s);1005 assert(m.prefix().second == m[0].first);1006 assert(!m.suffix().matched);1007 assert(m.suffix().first == m[0].second);1008 assert(m.suffix().second == s+3);1009 assert(m.length(0) == 3);1010 assert(m.position(0) == 0);1011 assert(m.str(0) == s);1012 }1013 {1014 std::wcmatch m;1015 const wchar_t s[] = L"acc";1016 assert(std::regex_search(s, m, std::wregex(L"a.c", std::regex_constants::awk)));1017 assert(m.size() == 1);1018 assert(!m.prefix().matched);1019 assert(m.prefix().first == s);1020 assert(m.prefix().second == m[0].first);1021 assert(!m.suffix().matched);1022 assert(m.suffix().first == m[0].second);1023 assert(m.suffix().second == s+3);1024 assert(m.length(0) == 3);1025 assert(m.position(0) == 0);1026 assert(m.str(0) == s);1027 }1028 {1029 std::wcmatch m;1030 const wchar_t s[] = L"abcdef";1031 assert(std::regex_search(s, m, std::wregex(L"(.*).*", std::regex_constants::awk)));1032 assert(m.size() == 2);1033 assert(!m.prefix().matched);1034 assert(m.prefix().first == s);1035 assert(m.prefix().second == m[0].first);1036 assert(!m.suffix().matched);1037 assert(m.suffix().first == m[0].second);1038 assert(m.suffix().second == s+6);1039 assert(m.length(0) == 6);1040 assert(m.position(0) == 0);1041 assert(m.str(0) == s);1042 assert(m.length(1) == 6);1043 assert(m.position(1) == 0);1044 assert(m.str(1) == s);1045 }1046 {1047 std::wcmatch m;1048 const wchar_t s[] = L"bc";1049 assert(std::regex_search(s, m, std::wregex(L"(a*)*", std::regex_constants::awk)));1050 assert(m.size() == 2);1051 assert(!m.prefix().matched);1052 assert(m.prefix().first == s);1053 assert(m.prefix().second == m[0].first);1054 assert(m.suffix().matched);1055 assert(m.suffix().first == m[0].second);1056 assert(m.suffix().second == s+2);1057 assert(m.length(0) == 0);1058 assert(m.position(0) == 0);1059 assert(m.str(0) == L"");1060 assert(m.length(1) == 0);1061 assert(m.position(1) == 0);1062 assert(m.str(1) == L"");1063 }1064 {1065 std::wcmatch m;1066 const wchar_t s[] = L"abbc";1067 assert(!std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));1068 assert(m.size() == 0);1069 }1070 {1071 std::wcmatch m;1072 const wchar_t s[] = L"abbbc";1073 assert(std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));1074 assert(m.size() == 1);1075 assert(!m.prefix().matched);1076 assert(m.prefix().first == s);1077 assert(m.prefix().second == m[0].first);1078 assert(!m.suffix().matched);1079 assert(m.suffix().first == m[0].second);1080 assert(m.suffix().second == m[0].second);1081 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1082 assert(m.position(0) == 0);1083 assert(m.str(0) == s);1084 }1085 {1086 std::wcmatch m;1087 const wchar_t s[] = L"abbbbc";1088 assert(std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));1089 assert(m.size() == 1);1090 assert(!m.prefix().matched);1091 assert(m.prefix().first == s);1092 assert(m.prefix().second == m[0].first);1093 assert(!m.suffix().matched);1094 assert(m.suffix().first == m[0].second);1095 assert(m.suffix().second == m[0].second);1096 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1097 assert(m.position(0) == 0);1098 assert(m.str(0) == s);1099 }1100 {1101 std::wcmatch m;1102 const wchar_t s[] = L"abbbbbc";1103 assert(std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));1104 assert(m.size() == 1);1105 assert(!m.prefix().matched);1106 assert(m.prefix().first == s);1107 assert(m.prefix().second == m[0].first);1108 assert(!m.suffix().matched);1109 assert(m.suffix().first == m[0].second);1110 assert(m.suffix().second == m[0].second);1111 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1112 assert(m.position(0) == 0);1113 assert(m.str(0) == s);1114 }1115 {1116 std::wcmatch m;1117 const wchar_t s[] = L"adefc";1118 assert(!std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));1119 assert(m.size() == 0);1120 }1121 {1122 std::wcmatch m;1123 const wchar_t s[] = L"abbbbbbc";1124 assert(!std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));1125 assert(m.size() == 0);1126 }1127 {1128 std::wcmatch m;1129 const wchar_t s[] = L"adec";1130 assert(!std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));1131 assert(m.size() == 0);1132 }1133 {1134 std::wcmatch m;1135 const wchar_t s[] = L"adefc";1136 assert(std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));1137 assert(m.size() == 1);1138 assert(!m.prefix().matched);1139 assert(m.prefix().first == s);1140 assert(m.prefix().second == m[0].first);1141 assert(!m.suffix().matched);1142 assert(m.suffix().first == m[0].second);1143 assert(m.suffix().second == m[0].second);1144 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1145 assert(m.position(0) == 0);1146 assert(m.str(0) == s);1147 }1148 {1149 std::wcmatch m;1150 const wchar_t s[] = L"adefgc";1151 assert(std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));1152 assert(m.size() == 1);1153 assert(!m.prefix().matched);1154 assert(m.prefix().first == s);1155 assert(m.prefix().second == m[0].first);1156 assert(!m.suffix().matched);1157 assert(m.suffix().first == m[0].second);1158 assert(m.suffix().second == m[0].second);1159 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1160 assert(m.position(0) == 0);1161 assert(m.str(0) == s);1162 }1163 {1164 std::wcmatch m;1165 const wchar_t s[] = L"adefghc";1166 assert(std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));1167 assert(m.size() == 1);1168 assert(!m.prefix().matched);1169 assert(m.prefix().first == s);1170 assert(m.prefix().second == m[0].first);1171 assert(!m.suffix().matched);1172 assert(m.suffix().first == m[0].second);1173 assert(m.suffix().second == m[0].second);1174 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1175 assert(m.position(0) == 0);1176 assert(m.str(0) == s);1177 }1178 {1179 std::wcmatch m;1180 const wchar_t s[] = L"adefghic";1181 assert(!std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));1182 assert(m.size() == 0);1183 }1184 {1185 std::wcmatch m;1186 const wchar_t s[] = L"tournament";1187 assert(std::regex_search(s, m, std::wregex(L"tour|to|tournament",1188 std::regex_constants::awk)));1189 assert(m.size() == 1);1190 assert(!m.prefix().matched);1191 assert(m.prefix().first == s);1192 assert(m.prefix().second == m[0].first);1193 assert(!m.suffix().matched);1194 assert(m.suffix().first == m[0].second);1195 assert(m.suffix().second == m[0].second);1196 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1197 assert(m.position(0) == 0);1198 assert(m.str(0) == s);1199 }1200 {1201 std::wcmatch m;1202 const wchar_t s[] = L"tournamenttotour";1203 assert(std::regex_search(s, m, std::wregex(L"(tour|to|tournament)+",1204 std::regex_constants::awk | std::regex_constants::nosubs)));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) >= 0 && static_cast<std::size_t>(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"ttotour";1219 assert(std::regex_search(s, m, std::wregex(L"(tour|to|t)+",1220 std::regex_constants::awk)));1221 assert(m.size() == 2);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) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1229 assert(m.position(0) == 0);1230 assert(m.str(0) == s);1231 assert(m.length(1) == 4);1232 assert(m.position(1) == 3);1233 assert(m.str(1) == L"tour");1234 }1235 {1236 std::wcmatch m;1237 const wchar_t s[] = L"-ab,ab-";1238 assert(!std::regex_search(s, m, std::wregex(L"-(.*),\1-", std::regex_constants::awk)));1239 assert(m.size() == 0);1240 }1241 {1242 std::wcmatch m;1243 const wchar_t s[] = L"-ab,ab-";1244 assert(std::regex_search(s, m, std::wregex(L"-.*,.*-", std::regex_constants::awk)));1245 assert(m.size() == 1);1246 assert(!m.prefix().matched);1247 assert(m.prefix().first == s);1248 assert(m.prefix().second == m[0].first);1249 assert(!m.suffix().matched);1250 assert(m.suffix().first == m[0].second);1251 assert(m.suffix().second == m[0].second);1252 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1253 assert(m.position(0) == 0);1254 assert(m.str(0) == s);1255 }1256 {1257 std::wcmatch m;1258 const wchar_t s[] = L"a";1259 assert(std::regex_search(s, m, std::wregex(L"^[a]$",1260 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) == 1);1269 assert(m.position(0) == 0);1270 assert(m.str(0) == L"a");1271 }1272 {1273 std::wcmatch m;1274 const wchar_t s[] = L"a";1275 assert(std::regex_search(s, m, std::wregex(L"^[ab]$",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"c";1291 assert(std::regex_search(s, m, std::wregex(L"^[a-f]$",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) == s);1303 }1304 {1305 std::wcmatch m;1306 const wchar_t s[] = L"g";1307 assert(!std::regex_search(s, m, std::wregex(L"^[a-f]$",1308 std::regex_constants::awk)));1309 assert(m.size() == 0);1310 }1311 {1312 std::wcmatch m;1313 const wchar_t s[] = L"Iraqi";1314 assert(std::regex_search(s, m, std::wregex(L"q[^u]",1315 std::regex_constants::awk)));1316 assert(m.size() == 1);1317 assert(m.prefix().matched);1318 assert(m.prefix().first == s);1319 assert(m.prefix().second == m[0].first);1320 assert(!m.suffix().matched);1321 assert(m.suffix().first == m[0].second);1322 assert(m.suffix().second == m[0].second);1323 assert(m.length(0) == 2);1324 assert(m.position(0) == 3);1325 assert(m.str(0) == L"qi");1326 }1327 {1328 std::wcmatch m;1329 const wchar_t s[] = L"Iraq";1330 assert(!std::regex_search(s, m, std::wregex(L"q[^u]",1331 std::regex_constants::awk)));1332 assert(m.size() == 0);1333 }1334 {1335 std::wcmatch m;1336 const wchar_t s[] = L"AmB";1337 assert(std::regex_search(s, m, std::wregex(L"A[[:lower:]]B",1338 std::regex_constants::awk)));1339 assert(m.size() == 1);1340 assert(!m.prefix().matched);1341 assert(m.prefix().first == s);1342 assert(m.prefix().second == m[0].first);1343 assert(!m.suffix().matched);1344 assert(m.suffix().first == m[0].second);1345 assert(m.suffix().second == m[0].second);1346 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1347 assert(m.position(0) == 0);1348 assert(m.str(0) == s);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() == 0);1356 }1357 {1358 std::wcmatch m;1359 const wchar_t s[] = L"AMB";1360 assert(std::regex_search(s, m, std::wregex(L"A[^[:lower:]]B",1361 std::regex_constants::awk)));1362 assert(m.size() == 1);1363 assert(!m.prefix().matched);1364 assert(m.prefix().first == s);1365 assert(m.prefix().second == m[0].first);1366 assert(!m.suffix().matched);1367 assert(m.suffix().first == m[0].second);1368 assert(m.suffix().second == m[0].second);1369 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1370 assert(m.position(0) == 0);1371 assert(m.str(0) == s);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() == 0);1379 }1380 {1381 std::wcmatch m;1382 const wchar_t s[] = L"A5B";1383 assert(!std::regex_search(s, m, std::wregex(L"A[^[:lower:]0-9]B",1384 std::regex_constants::awk)));1385 assert(m.size() == 0);1386 }1387 {1388 std::wcmatch m;1389 const wchar_t s[] = L"A?B";1390 assert(std::regex_search(s, m, std::wregex(L"A[^[:lower:]0-9]B",1391 std::regex_constants::awk)));1392 assert(m.size() == 1);1393 assert(!m.prefix().matched);1394 assert(m.prefix().first == s);1395 assert(m.prefix().second == m[0].first);1396 assert(!m.suffix().matched);1397 assert(m.suffix().first == m[0].second);1398 assert(m.suffix().second == m[0].second);1399 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1400 assert(m.position(0) == 0);1401 assert(m.str(0) == s);1402 }1403 {1404 std::wcmatch m;1405 const wchar_t s[] = L"m";1406 assert(std::regex_search(s, m, std::wregex(L"[a[=m=]z]",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) >= 0 && static_cast<std::size_t>(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"m";1422 assert(!std::regex_search(s, m, std::wregex(L"[a[=M=]z]",1423 std::regex_constants::awk)));1424 assert(m.size() == 0);1425 }1426 {1427 std::wcmatch m;1428 const wchar_t s[] = L"-";1429 assert(std::regex_search(s, m, std::wregex(L"[a[.hyphen.]z]",1430 std::regex_constants::awk)));1431 assert(m.size() == 1);1432 assert(!m.prefix().matched);1433 assert(m.prefix().first == s);1434 assert(m.prefix().second == m[0].first);1435 assert(!m.suffix().matched);1436 assert(m.suffix().first == m[0].second);1437 assert(m.suffix().second == m[0].second);1438 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1439 assert(m.position(0) == 0);1440 assert(m.str(0) == s);1441 }1442 {1443 std::wcmatch m;1444 const wchar_t s[] = L"z";1445 assert(std::regex_search(s, m, std::wregex(L"[a[.hyphen.]z]",1446 std::regex_constants::awk)));1447 assert(m.size() == 1);1448 assert(!m.prefix().matched);1449 assert(m.prefix().first == s);1450 assert(m.prefix().second == m[0].first);1451 assert(!m.suffix().matched);1452 assert(m.suffix().first == m[0].second);1453 assert(m.suffix().second == m[0].second);1454 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1455 assert(m.position(0) == 0);1456 assert(m.str(0) == s);1457 }1458 {1459 std::wcmatch m;1460 const wchar_t s[] = L"m";1461 assert(!std::regex_search(s, m, std::wregex(L"[a[.hyphen.]z]",1462 std::regex_constants::awk)));1463 assert(m.size() == 0);1464 }1465 {1466 std::wcmatch m;1467 const wchar_t s[] = L"01a45cef9";1468 assert(std::regex_search(s, m, std::wregex(L"[ace1-9]*",1469 std::regex_constants::awk)));1470 assert(m.size() == 1);1471 assert(!m.prefix().matched);1472 assert(m.prefix().first == s);1473 assert(m.prefix().second == m[0].first);1474 assert(m.suffix().matched);1475 assert(m.suffix().first == m[0].second);1476 assert(m.suffix().second == s + std::char_traits<wchar_t>::length(s));1477 assert(m.length(0) == 0);1478 assert(m.position(0) == 0);1479 assert(m.str(0) == L"");1480 }1481 {1482 std::wcmatch m;1483 const wchar_t s[] = L"01a45cef9";1484 assert(std::regex_search(s, m, std::wregex(L"[ace1-9]+",1485 std::regex_constants::awk)));1486 assert(m.size() == 1);1487 assert(m.prefix().matched);1488 assert(m.prefix().first == s);1489 assert(m.prefix().second == m[0].first);1490 assert(m.suffix().matched);1491 assert(m.suffix().first == m[0].second);1492 assert(m.suffix().second == s + std::char_traits<wchar_t>::length(s));1493 assert(m.length(0) == 6);1494 assert(m.position(0) == 1);1495 assert(m.str(0) == L"1a45ce");1496 }1497 {1498 const wchar_t r[] = L"^[-+]?[0-9]+[CF]$";1499 std::ptrdiff_t sr = std::char_traits<wchar_t>::length(r);1500 typedef forward_iterator<const wchar_t*> FI;1501 typedef bidirectional_iterator<const wchar_t*> BI;1502 std::wregex regex(FI(r), FI(r+sr), std::regex_constants::awk);1503 std::match_results<BI> m;1504 const wchar_t s[] = L"-40C";1505 std::ptrdiff_t ss = std::char_traits<wchar_t>::length(s);1506 assert(std::regex_search(BI(s), BI(s+ss), m, regex));1507 assert(m.size() == 1);1508 assert(!m.prefix().matched);1509 assert(m.prefix().first == BI(s));1510 assert(m.prefix().second == m[0].first);1511 assert(!m.suffix().matched);1512 assert(m.suffix().first == m[0].second);1513 assert(m.suffix().second == m[0].second);1514 assert(m.length(0) == 4);1515 assert(m.position(0) == 0);1516 assert(m.str(0) == s);1517 }1518 {1519 std::wcmatch m;1520 const wchar_t s[] = L"\n\n\n";1521 assert(std::regex_search(s, m, std::wregex(L"[\\n]+",1522 std::regex_constants::awk)));1523 assert(m.size() == 1);1524 assert(!m.prefix().matched);1525 assert(m.prefix().first == s);1526 assert(m.prefix().second == m[0].first);1527 assert(!m.suffix().matched);1528 assert(m.suffix().first == m[0].second);1529 assert(m.suffix().second == s + std::char_traits<wchar_t>::length(s));1530 assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));1531 assert(m.position(0) == 0);1532 assert(m.str(0) == s);1533 }1534#endif // TEST_HAS_NO_WIDE_CHARACTERS1535 1536 return 0;1537}1538