Numerischen Wert aus string isolieren
-
Moinsen,
Versuche mit sscanf den numerischen Wert von searchid= aus einem String zu isolieren:
char *sNewURL = "http://www.dom.tld/search.php?searchid=1234567&pp=25"; int dSearchID = NULL; sscanf (sNewURL, "%*[^searchid=]%d%*[^\n]", dSearchID);
Klappt nur leider nicht ganz so, wie ich mir das vorgestellt hatte.
Im Erfolgsfall soll dSearchID den Wert 1234567 haben.
Vermutlich liegts an meiner Umsetzung der RegEx - vertue mich da immer aufs neue.
Evtl. ist sscanf auch nicht das richtige Werkzeug für diesen Fall - bin nur der Meinung, soein Problem schonmal mit sscanf gelöst zu haben, weiß nur nicht mehr genau wie. Bin für jeden Vorschlag zu haben
-
sscanf hat nichts mit RegEx zu tun, sscanf ist C Standard, RegEx nicht.
sscanf reicht für diesen Zweck aus:if( 1==sscanf (sNewURL, "%*[^=]=%d", &dSearchID) )
wobei sscanf keine (int)Wertebereichsprüfung macht.
-
Danke - das searchid= könnte aber auch theoretisch an einer beliebigen Stelle hinter dem '?' stehen.
Sollte der String aus irgend einem Grund anders aufgebaut sein, würde das Ergebnis nicht mehr stimmen
wenn sNewURL = http://www.dom.tld/search.php?pp=25&searchid=1234567 dann dSearchID = 25
Wie sage ich dem sscanf, das nur der Wert hinter dem searchid= übernommen werden soll ?
Regex habe ich nur erwähnt, da die sscanf format-Syntax Ähnlichkeit mit einem Regulären Ausdruck aufweist. Bereichsprüfung werde ich anders Umsetzen müssen.
-
Der Formatspecifier %[ bei
scanf
ist ein Scanset. Also einen Menge und keine exakter Text.Suche z.B. mit
strstr
nach searchid= und ab der Fundstelle dann weiter mit sscanf
-
Mit sscanf kann man keinen String suchen, dafür gibt es andere Funktionen:
if( strstr(sNewURL,"searchid=") && 1==sscanf (strstr(sNewURL,"searchid="), "%*[^=]=%d", &dSearchID) )
-
Wieder was dazugelernt. Danke