Hi,
Nachdem ich mit viel Mühe einen regulären Ausdruck zusammengezimmert habe (bin dahingehend Anfänger, war also schon eine Leistung für die ich mir selbst auf die Schulter klopfen kann), macht mir jetzt die GNU-Funktion zum Auswerten derselben Probleme.
Anhand der Dokumentation, die ich ergoogelt habe habe ich folgenden Programmcode zum Testen erstellt:
[highlight=cpp]
#include <iostream>
#include <cstdlib>
#include <regex.h>
using namespace std;
bool IsNumeric(std::string numstr)
{
bool rettest = false;
int regreturn=0;
const char* regexstr="^((-?\\d?\\.\\d+[eE][+-]?\\d{2})|(-?\\d*\\.?\\d+))$";
regex_t parsreg;
if(regcomp(&parsreg, regexstr, REG_NOSUB) != 0)
{
cerr << "Could not create regular expression, aborting with 'not matching'";
}
else
{
regreturn = regexec(&parsreg, numstr.c_str(), 0, NULL,0);
if (regreturn == REG_ESPACE) cerr << "regular expression ran out of memory, aborting with 'not matching'";
if(regreturn == 0) rettest=true;
}
regfree(&parsreg);
return rettest;
}
int main(int argc, char *argv[])
{
cout << "leer:" << IsNumeric("") << "\n";
cout << "1:" << IsNumeric("1") << "\n";
cout << "1.3324e-12:"<< IsNumeric("1.3324e-12")<<"\n";
cout << "125e23:" << IsNumeric("125e23") << "\n";
cout << "13.445:" << IsNumeric("13.445") << "\n";
cout << "16468123:" << IsNumeric("16468123") << "\n";
cout << "-1324.57:" << IsNumeric("-1324.57") << "\n";
cout << "-1.225e21:" << IsNumeric("-1.225e21") << "\n";
return EXIT_SUCCESS;
}
[/highlight]
Egal was ich der Funktion übergebe, ich bekomme in regreturn immer eine 1 zurück (No match) ich vermute, dass irgendwo in den Flags ein Fehler hängt, die Beschreibung dazu habe ich nämlich irgendwie nicht so ganz kapiert, denke aber das doch irgendwie richtig ausgewählt zu haben
Nachdem ich mit viel Mühe einen regulären Ausdruck zusammengezimmert habe (bin dahingehend Anfänger, war also schon eine Leistung für die ich mir selbst auf die Schulter klopfen kann), macht mir jetzt die GNU-Funktion zum Auswerten derselben Probleme.
Anhand der Dokumentation, die ich ergoogelt habe habe ich folgenden Programmcode zum Testen erstellt:
[highlight=cpp]
#include <iostream>
#include <cstdlib>
#include <regex.h>
using namespace std;
bool IsNumeric(std::string numstr)
{
bool rettest = false;
int regreturn=0;
const char* regexstr="^((-?\\d?\\.\\d+[eE][+-]?\\d{2})|(-?\\d*\\.?\\d+))$";
regex_t parsreg;
if(regcomp(&parsreg, regexstr, REG_NOSUB) != 0)
{
cerr << "Could not create regular expression, aborting with 'not matching'";
}
else
{
regreturn = regexec(&parsreg, numstr.c_str(), 0, NULL,0);
if (regreturn == REG_ESPACE) cerr << "regular expression ran out of memory, aborting with 'not matching'";
if(regreturn == 0) rettest=true;
}
regfree(&parsreg);
return rettest;
}
int main(int argc, char *argv[])
{
cout << "leer:" << IsNumeric("") << "\n";
cout << "1:" << IsNumeric("1") << "\n";
cout << "1.3324e-12:"<< IsNumeric("1.3324e-12")<<"\n";
cout << "125e23:" << IsNumeric("125e23") << "\n";
cout << "13.445:" << IsNumeric("13.445") << "\n";
cout << "16468123:" << IsNumeric("16468123") << "\n";
cout << "-1324.57:" << IsNumeric("-1324.57") << "\n";
cout << "-1.225e21:" << IsNumeric("-1.225e21") << "\n";
return EXIT_SUCCESS;
}
[/highlight]
Egal was ich der Funktion übergebe, ich bekomme in regreturn immer eine 1 zurück (No match) ich vermute, dass irgendwo in den Flags ein Fehler hängt, die Beschreibung dazu habe ich nämlich irgendwie nicht so ganz kapiert, denke aber das doch irgendwie richtig ausgewählt zu haben
Comment