Suche das erste Auftreten des Strings search im String str.
Suche das erste Auftreten des Strings search im String str. Die Funktion gibt einen Zeiger auf die Stelle im String zurück, an der der gesuchte String zum ersten Mal auftritt. Wird der Unterstring nicht gefunden, ergibt der Aufruf 0. Um die erste Position eines Substrings in einem String zu ermitteln, verwenden Sie die Funktion strstrpos.
Name | Typ | Default | Beschreibung |
Return | char* | Zeiger auf das erste Auftreten des Strings str im String str. 0 : String nicht gefunden |
|
str | char* | - | Zeichenkette, die durchsucht werden soll |
search | char* | - | Suche nach diesem Unterstring. Muss ungleich "" sein. [Ab v3.2.3 R2600, 08.08.2011] Der Suchstring darf ein regulärer Ausdruck sein. Reguläre Ausdrücke werden mit dem Präfix "regexp:" gekennzeichnet. [Ab v3.3 R4000, 4. Jul 2013] Bei Verwendung des Präfixes "pcre:" ('perl compatible regular expressions') wird eine neuere Implementierung zur Berechnung regulärer Ausdrücke verwendet. Wir empfehlen die Verwendung dieses Verfahrens. Die alte Implementierung bleibt aus Gründen der Rückwärtskompatibilität erhalten. Ab v3.4 R9000 und CS5 werden reguläre Ausdrücke ausschließlich durch PCRE verarbeitet. Mit regexp: markierte Ausdrücke werden automatisch an PCRE weitergeleitet. Lediglich CS4 verwendet weiter die alte Implementierung für GNU-kompatible reguläre Ausdrücke. |
startPos | int | 0 | Ab dieser Stelle mit der Suche beginnen. |
matchlen | int* | 0 | (nur bei Verwendung regulärer Ausdrücke) Länge des gefundenen Ausdruckes |
matches | int* | 0 | (nur bei Verwendung regulärer Ausdrücke) int-Array mit Angaben über das Ergebnis Das Array enthält jeweils Startposition und Länge des nächsten gefundenen Ausdruckes. Im ersten Zahlenpaar stehen die Angaben für den gesamten Ausdruck. Die folgenden Paare enthalten jeweils die Angaben des i-ten Unterausdruckes. Unterausdrücke sind die in runde Klammern eingeschlossenen Teile des regulären Ausdruckes, also etwa ([a-z]{3,7}). Abgeschlossen wird das Feld durch das Paar (-1, 0). Beachten Sie bitte, dass Unterausdrücke durchaus die Länge 0 liefern können. Wird der reguläre Ausdruck ([0-9])([a-z]{0,7})([0-9])) auf den Text "14" angewendet, ist nämlich der zweite Ausdruck leer. Bei einer Angabe ungleich 0 muss das Array mind. um 4 Integers größer sein als die doppelte Anzahl der Klammerausdrücke im regulären Ausdruck - jeweils zwei int's für den Starteintrag, die n Subentries und die Ende-Markierung. Eine einfache Definition eines Matches-Arrays für einen regulären Ausdruck mit 4 Untereinträgen. int matches [6]; |
compile_options | int | 0 | Zusatzoptionen beim Kompilieren des regulären Ausdruckes, siehe hier |
study_options | int | 0 | Zusatzoptionen beim Untersuchen des kompilierten regulären Ausdruckes, siehe hier |
exec_options | int | 0 | Zusatzoptionen beim Suchen des regulären Ausdruckes, siehe hier |
strcpy (str, "Matthias"); strstr (str, "hi") ergibt "hias"
Und hier ein Beispiel mit regulären Ausdrücken.
int main () { char str [512]; int pos = 0; char * sub; int matches [2 * (1 + 2 +1)]; // 2 * (1 + Anzahl der der Klammern im Ausdruck + 1) int i, p, l;
strcpy (str, "abc11188888#defgh11177777#hijklmn11166666#opqäöü11155555#qwertzu11144444#XYZ");
while (1) { sub = strstr (str, "pcre:([0-9]{6})(#)", pos, 0, matches); if (!sub) break;
wlog ("", "Pos %d : '%s'\n", pos, sub);
i = 0; while (1) { p = matches [i*2]; // startpos of sub token l = matches [i*2+1]; // length of sub token if (p < 0) break;
wlog ("", " %d. [%d, %d] : '%s'\n", i, p, l, strsubstring (str, p, l)); ++i; }
pos = matches [0] + matches [1] + 1; }
return 0; }
Alphabetic index HTML hierarchy of classes or Java