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