Ich habe eine hässliche Durcheinander einer Zeichenfolge, die aus mehreren URIs besteht.Mit std :: Regex zu filtern Eingang
:/SymbolStandards/JMSymbology/MIL_STD_2525D_Symbols/0_301_0.svg,:/SymbolStandards/JMSymbology/MIL_STD_2525D_Symbols/02011.svg,:/SymbolStandards/JMSymbology/MIL_STD_2525D_Symbols/02012.svg,:/SymbolStandards/JMSymbology/MIL_STD_2525D_Symbols/02110000.svg
Was würde ich tun möchte, ist :/.,
jedes Vorkommen der Zeichen Streifen aus, so kann ich eine einzelne Zeichenfolge, die ein gültiger Dateiname sein würde.
ich diese einfach in regulären Ausdruck geschrieben habe, um jus zu tun, die: [^(:/,.)]
Es scheint der richtige reguläre Ausdruck zu sein, nach http://www.regexpal.com/.
Wenn ich jedoch den folgenden C++ - Code ausführe, bekomme ich nicht das zurück, was ich erwartet habe (nur alphanumerische Zeichen und Unterstriche), ich bekomme nur das erste alphanumerische Zeichen in der folgenden Reihenfolge zurück: S
.
Was mache ich falsch mit Std :: Regex, oder ist mein Regex-Ausdruck ausgeschaltet?
#include <iostream>
#include <regex>
#include <string>
static const std::string filenames {R"(:/SymbolStandards/JMSymbology/MIL_STD_2525D_Symbols/0_301_0.svg,:/SymbolStandards/JMSymbology/MIL_STD_2525D_Symbols/02011.svg,:/SymbolStandards/JMSymbology/MIL_STD_2525D_Symbols/02012.svg,:/SymbolStandards/JMSymbology/MIL_STD_2525D_Symbols/02110000.svg)"};
static const std::regex filename_extractor("[^(:/,.)]");
int main() {
std::smatch filename_match;
if(std::regex_search(filenames, filename_match, filename_extractor))
{
std::cout << "Number of filenames: " << filename_match.size() << std::endl;
for(std::size_t i = 0; i < filename_match.size(); ++i)
{
std::cout << i << ": " << filename_match[i] << std::endl;
}
}
return 0;
}
Ich vermute, dass Sie 'std :: Regex_replace 'wollen, aber das ist wahrscheinlich besser, Regex überhaupt nicht zu verwenden. Schauen Sie sich vielleicht [std :: remove_if] (http://en.cppreference.com/w/cpp/algorithm/remove) an. – Galik
Ich verstehe es nicht. Ihre Zeichenfolge enthält ',: /', nicht ': /,'? Kannst du das nicht stattdessen teilen? – rustyx