Ich analysiere eine Textdatei mit Boost Regex in C++. Ich suche nach \ 'Zeichen aus der Datei. Diese Datei enthält auch einige Unicode-Zeichen. Also, gibt es eine Möglichkeit, '\' und '\ u' Zeichen zu trennen. Im Folgenden Inhalt von test.txt, die ichWie man das Escape-Element '' und das Unicode-Zeichen ' u' mit Boost-Regex in C++ analysiert
"ID": "\u01FE234DA - this is id ",
"speed": "96\/78",
"avg": "\u01FE234DA avg\83"
Nach bin Parsen ist mein Versuch
#include <boost/regex.hpp>
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
const int BUFSIZE = 500;
int main(int argc, char** argv) {
if (argc < 2) {
cout << "Pass the input file" << endl;
exit(0);
}
boost::regex re("\\\\+");
string file(argv[1]);
char buf[BUFSIZE];
boost::regex uni("\\\\u+");
ifstream in(file.c_str());
while (!in.eof())
{
in.getline(buf, BUFSIZE-1);
if (boost::regex_search(buf, re))
{
cout << buf << endl;
cout << "(\) found" << endl;
if (boost::regex_search(buf, uni)) {
cout << buf << endl;
cout << "unicode found" << endl;
}
}
}
}
Nun, wenn ich oben Code verwenden, druckt er folgende
"ID": "\u01FE234DA - this is id ",
(\) found
"ID": "\u01FE234DA - this is id ",
unicode found
"speed": "96\/78",
(\) found
"avg": "\u01FE234DA avg\83"
(\) found
"avg": "\u01FE234DA avg\83"
unicode found
Statt Ich möchte folgende
"ID": "\u01FE234DA - this is id ",
unicode found
"speed": "96\/78",
(\) found
"avg": "\u01FE234DA avg\83"
(\) and unicode found
Ich denke, der Code ist nicht in der Lage, '\' und '\' getrennt zu unterscheiden, aber ich bin mir nicht sicher, wo ich was ändern soll.
Ihr aktueller Code erzeugt ** ** ** nicht die Ausgabe, die Sie aufgrund der auskommentierten Anweisungen anzeigen. Was ist falsch daran, beide Überprüfungen auszuführen? (Es ist sowieso eine fehlerhafte Methode. Wahrscheinlich wäre es besser, regex nicht zu verwenden und einen Backslash zu einem Zeitpunkt zu untersuchen, vom ersten zum letzten. "Lassen Sie uns einen Regex verwenden - jetzt haben Sie zwei Probleme.") – usr2564301
Wenn wir diesen Code als behalten ist dann "ID" -Feld zweimal angezeigt. dh "ID" wird als Unicode betrachtet und (\) gefunden – kkard
Ich habe die Kommentare jetzt entfernt Ich denke Code sollte funktionieren – kkard