Taille de std::match_results
Question :
Dans le code C 11 suivant , pourquoi matches.size() renvoie-t-il 1 au lieu des 3 attendus ?
<code class="cpp">#include <iostream> #include <string> #include <regex> int main() { std::string haystack("abcdefabcghiabc"); std::regex needle("abc"); std::smatch matches; std::regex_search(haystack, matches, needle); std::cout << matches.size() << std::endl; }</code>
Réponse :
La fonction size() de std::match_results renvoie le nombre de groupes de capture plus 1, indiquant la correspondance complète. Dans ce cas, il n'y a pas de groupes de capture, donc la taille est de 1.
Explication :
La fonction regex_search trouve la première occurrence de l'expression régulière dans l'entrée chaîne. Dans ce cas, il trouve « abc » au début de la chaîne. L'objet matches contient des informations sur la correspondance, y compris les groupes de capture.
Cependant, l'expression régulière fournie ne contient aucun groupe de capture. Les groupes de capture sont des parenthèses dans l'expression régulière qui correspondent à des parties spécifiques de la chaîne d'entrée. Si des groupes de capture étaient utilisés, matches.size() renverrait le nombre de groupes de capture plus 1.
Recherche de plusieurs correspondances :
Pour rechercher plusieurs correspondances, vous pouvez utilisez une approche alternative qui itère sur les correspondances :
<code class="cpp">int main() { std::regex r("abc"); std::string s = "abcdefabcghiabc"; int i = 0; std::sregex_iterator it(s.begin(), s.end(), r); std::sregex_iterator end; while (it != end) { std::smatch m = *it; std::cout << i++ << ": " << m.str() << std::endl; it++; } return 0; }</code>
Ce code s'imprimera :
0: abc 1: abc 2: abc
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!