sub_match, classe
Décrit une sous-correspondance.
Syntaxe
template <class BidIt>
class sub_match
: public std::pair<BidIt, BidIt>
Paramètres
BidIt
Type d'itérateur pour les sous-correspondances.
Notes
Le modèle de classe décrit un objet qui désigne une séquence de caractères correspondant à un groupe de capture dans un appel à regex_match ou à regex_search. Les objets de type de classe match_results contiennent un tableau de ces objets, un pour chaque groupe de capture de l’expression régulière utilisée dans la recherche.
Si le groupe de capture n’a pas été mis en correspondance avec le membre matched
de données de l’objet contient false, et les deux itérateurs et second
(hérités first
de la basestd::pair
) sont égaux. Si le groupe de capture a une correspondance, matched
a la valeur true et l’itérateur first
pointe vers le premier caractère de la séquence cible correspondant au groupe de capture. En outre, l’itérateur second
pointe vers la position située après le dernier caractère de la séquence cible correspondant au groupe de capture. Pour une correspondance de longueur nulle, le membre matched
a la valeur true, les deux itérateurs sont égaux, et les deux pointent vers la position de la correspondance.
Une correspondance de longueur nulle peut se produire quand un groupe de capture se compose uniquement d’une assertion, ou d’une répétition n’autorisant aucune répétition. Par exemple :
« ^ » correspond à la séquence cible « a ». L’objet sub_match
correspondant au groupe de capture 0 contient les itérateurs qui pointent vers le premier caractère de la séquence.
« b(a*)b » correspond à la séquence cible « bb ». L’objet sub_match
correspondant au groupe de capture 1 contient les itérateurs qui pointent vers le second caractère de la séquence.
Typedefs
Nom de type | Description |
---|---|
difference_type | Type d’une différence d’itérateur. |
iterator | Type d'un itérateur. |
value_type | Type d’un élément. |
Fonctions Membre
Fonction membre | Description |
---|---|
compare | Comparer une sous-correspondance à une séquence. |
length | Retourne la longueur d'une sous-correspondance. |
Correspondait | Indique si la correspondance a réussi. |
str | Convertit la sous-correspondance en chaîne. |
Opérateurs
Opérateur | Description |
---|---|
opérateur basic_string value_type<> | Effectue un cast de la sous-correspondance en chaîne. |
Exemple
// std__regex__sub_match.cpp
// compile with: /EHsc
#include <regex>
#include <iostream>
int main()
{
std::regex rx("c(a*)|(b)");
std::cmatch mr;
std::regex_search("xcaaay", mr, rx);
std::csub_match sub = mr[1];
std::cout << "matched == " << std::boolalpha
<< sub.matched << std::endl;
std::cout << "length == " << sub.length() << std::endl;
std::csub_match::difference_type dif = std::distance(sub.first, sub.second);
std::cout << "difference == " << dif << std::endl;
std::csub_match::iterator first = sub.first;
std::csub_match::iterator last = sub.second;
std::cout << "range == " << std::string(first, last)
<< std::endl;
std::cout << "string == " << sub << std::endl;
std::csub_match::value_type const *ptr = "aab";
std::cout << "compare(\"aab\") == "
<< sub.compare(ptr) << std::endl;
std::cout << "compare(string) == "
<< sub.compare(std::string("AAA")) << std::endl;
std::cout << "compare(sub) == "
<< sub.compare(sub) << std::endl;
return (0);
}
matched == true
length == 3
difference == 3
range == aaa
string == aaa
compare("aab") == -1
compare(string) == 1
compare(sub) == 0
Spécifications
Header :<regex>
Espace de noms : std
sub_match ::compare
Comparer une sous-correspondance à une séquence.
int compare(const sub_match& right) const;
int compare(const basic_string<value_type>& str) const;
int compare(const value_type *ptr) const;
Paramètres
right
Sous-correspondance avec laquelle effectuer la comparaison.
str
Chaîne de comparaison.
ptr
Séquence terminée par un caractère null avec laquelle effectuer la comparaison.
Notes
La première fonction membre compare la séquence mise en correspondance [first, second)
à la séquence mise en correspondance [right.first, right.second)
. La deuxième fonction membre compare la séquence mise en correspondance [first, second)
à la séquence de caractères [right.begin(), right.end())
. La troisième fonction membre compare la séquence mise en correspondance [first, second)
à la séquence de caractères [right, right + std::char_traits<value_type>::length(right))
.
Chaque fonction retourne :
une valeur négative si la première valeur différente dans la séquence mise en correspondance est inférieure à l'élément correspondant dans la séquence d'opérande (comme déterminé par std::char_traits<value_type>::compare
) ou si les deux valeurs ont un préfixe commun mais que la séquence cible est plus longue ;
zéro si les valeurs comparées sont égales élément par élément et qu'elles ont la même longueur ;
une valeur positive dans les autres cas.
sub_match ::d ifference_type
Type d’une différence d’itérateur.
typedef typename iterator_traits<BidIt>::difference_type difference_type;
Notes
Le typedef est un synonyme de iterator_traits<BidIt>::difference_type
.
sub_match ::iterator
Type d'un itérateur.
typedef BidIt iterator;
Notes
Le typedef est un synonyme de l'argument de type de modèle Bidit
.
sub_match ::length
Retourne la longueur d'une sous-correspondance.
difference_type length() const;
Notes
La fonction membre retourne la longueur de la séquence mise en correspondance, ou zéro en l'absence de séquence mise en correspondance.
sub_match ::matched
Indique si la correspondance a réussi.
bool matched;
Notes
Le membre contient true
seulement si le groupe de capture associé à *this
faisait partie de la correspondance d’expression régulière.
sub_match::operator basic_string<value_type>
Effectue un cast de la sous-correspondance en chaîne.
operator basic_string<value_type>() const;
Notes
L’opérateur membre retourne str()
.
sub_match ::str
Convertit la sous-correspondance en chaîne.
basic_string<value_type> str() const;
Notes
La fonction membre retourne basic_string<value_type>(first, second)
.
sub_match ::value_type
Type d’un élément.
typedef typename iterator_traits<BidIt>::value_type value_type;
Notes
Le typedef est un synonyme de iterator_traits<BidIt>::value_type
.