Search for the first occurrence of the string search in the string str.
Search for the first occurrence of the string search in the string str. The function returns the position in the string where the substring begins. If the substring is not found, the call returns -1.
Name | Type | Default | Description |
Return | int | 0-based position in the string in which the substring begins -1 : Character not found |
|
str | char* | - | Character string which is to be searched |
search | char* | - | Search for this substring. Must not be equal to "". since v3.2.3 R2600, 08.08.2011 The search string may be a regular expression. Use prefix "regexp:" to mark a search string as a regular expression.. since v3.3 R4000, 4. Jul 2013 With prefix "pcre:" a new machine for regular expressions is used. We recomment using this machine! Since v3.4 R9000 and CS5 only PCRE is used for regulare expressions. The prefix regexp: is still allowed but will use PCRE too. Only CS4 still uses the old GNU compatible implementation. |
startPos | int | 0 | (for regular expressions only) Start search at this character (not byte!) position |
matchlen | int* | 0 | (for regular expressions only) Length in characters of the found result |
matches | int* | 0 | (for regular expressions only) int-Array containing pairs of positions and lengths for the sub-entries of the next match. The first pair gives the position and the length of whole expression. The following pairs containing the positions and lengths of every sub-expression. Sub-expressions of an regular expressions are every "(...)" substring of the regular expression, for instance ([a-z]{3,7}). The array is closed by the pair (-1, 0). Attention : Sub entries may have a length of 0! The regular expression ([0-9])([a-z]{0,7})([0-9])) applied to "14" will return an empty string for the second sub-expression. Take care to allocate enough space, if you are using this array. You need at least (1 + number of sub-expressions + 1) * 2 integers. Simple way to define such an array for a regular expression with 4 sub-entries. int matches [6]; |
compile_options | int | 0 | Additional options while compiling regular expression, see here |
study_options | int | 0 | Additional options while studying compiled regular expression, see here |
exec_options | int | 0 | Additional options while executing regular expression, see here |
strcpy (str, "Matthias"); strstrpos (str, "hi") returns 4
Colorize all words of the given text. Take care to map all positions and lengths to characters!
int get_color (int * i, int * r, int * g, int * b) { if (*i > 8) *i = 0;
if (*i == 0) {*r = 100; *g = 149; *b = 23; } if (*i == 1) {*r = 210; *g = 105; *b = 30; } if (*i == 2) {*r = 255; *g = 99; *b = 71; } if (*i == 3) {*r = 255; *g = 215; *b = 0; } if (*i == 4) {*r = 216; *g = 191; *b = 216; } if (*i == 5) {*r = 175; *g = 238; *b = 238; } if (*i == 6) {*r = 173; *g = 255; *b = 47; } if (*i == 7) {*r = 0; *g = 191; *b = 255; } if (*i == 8) {*r = 218; *g = 165; *b =32; }
*i = *i + 1; return 1; }
int main () { String str = string::alloc (); char regex [20000]; char tmp [20000]; char sub [20000]; int startPos = 0; int matchlen; int matches [400]; int i, m = 0, cc = 0; int r, g, b; int slen;
strcpy (regex, "pcre:[^[:space:][:punct:]//.]+");
frame::gettext (gFrame, str); strcpy (tmp, string::get (str));
slen = strlen (tmp); while (1) { startPos = strstrpos (tmp, regex, startPos, &matchlen, matches); if (startPos < 0) break; m = m+1;
i = 0; while (matches[i*2] >= 0 && matches[(i*2)+1] >= 0) { strcpy (sub, tmp, matches[i*2], matches[i*2+1]); wlog ("", "Token %d/%d : [%d, %d]\n", m, i, matches[i*2], matches[i*2]+matches[i*2+1]); wlog ("", " '%s'\n", sub);
get_color (&cc, &r, &g, &b); textmodel::set_color_rgb ( frameB, matches[i*2], matches[i*2+1], r, g, b); i = i + 1; }
if (matchlen == 0) startPos = startPos +1; else startPos = startPos + matchlen; }
return 0; }
Here you will find a InDesign® test document (CS5.5):
Test document
This example will not work with "regexp:" but only with "pcre:".
int main () { char str [512]; int pos = 0; int matchlen;
strcpy (str, "abc11188888#defgh11177777#hijklmn11166666#opqäöü11155555#qwertzu11144444#XYZ");
while (1) { pos = strstrpos (str, "pcre:([0-9]{6})(#)", pos, &matchlen); if (pos<0) break;
wlog ("", "[%d, %d] : '%s'\n", pos, matchlen, strsubstring (str, pos, matchlen));
pos += matchlen + 1; }
return 0; }
Alphabetic index HTML hierarchy of classes or Java