Comment échapper à une chaîne pour une utilisation dans Boost Regex
Je suis juste obtenir ma tête autour des expressions régulières, et je suis en utilisant le Boost bibliothèque Regex.
J'ai besoin d'utiliser une regex qui comprend une URL spécifique, et il étouffe parce qu'évidemment il y a des caractères dans l'URL qui sont réservées pour les regex et doivent être échappés.
Est-il une fonction ou une méthode dans la bibliothèque Boost pour échapper à une chaîne de caractères pour ce type d'utilisation? Je sais qu'il y a de telles méthodes dans la plupart des autres regex implémentations, mais je n'en vois pas de coup de pouce.
Sinon, est-il une liste de tous les caractères qui doivent être échappé?
Vous devez vous connecter pour publier un commentaire.
Ironiquement, vous pouvez utiliser une regex pour échapper à votre URL de sorte qu'il peut être inséré dans une regex.
(Le drapeau
boost::format_sed
spécifie l'utilisation de la chaîne de remplacement du format de la sed. Dans sed, une évasion&
sera de sortie ce que compensée par l'ensemble de l'expression)Ou si vous n'êtes pas à l'aise avec sed du remplacement de la chaîne de format, il suffit de changer le drapeau de
boost::format_perl
, et vous pouvez utiliser le familier$&
à consulter pour toute correspondance par l'ensemble de l'expression.À l'aide du code à partir de Dav (+ un correctif de commentaires), j'ai créé ASCII/Unicode fonction
regex_escape()
:Pour la version ASCII, utilisez
std::string
/boost::regex
au lieu destd::wstring
/boost::wregex
.Même avec
boost::xpressive
:En C++11, vous pouvez utiliser raw littéraux de chaîne pour éviter de s'échapper de la chaîne regex:
std::string myRegex = R"(something\.com)";
Voir http://en.cppreference.com/w/cpp/language/string_literal, l'élément (6).