/* Do not remove the headers from this file! see /USAGE for more info. */ string *regexplode(string str, string pat) { mixed *tmp; tmp = reg_assoc(str, ({ pat }), ({ 1 }) ); return tmp[0]; } string* split( string str, string pattern ){ int i, j; mixed x,r; x = regexplode(str,pattern); j = sizeof(x); r = ({}); for(i=0;i<j;i+=2) r+= ({ x[i] }); return r; } int search( string s, string pat ) { mixed m; m = regexplode(s,pat); if( sizeof(m) == 1 ) return -1; return strlen(m[0]); } int rsearch( string s, string pat ) { mixed m; m = regexplode(s,pat); if(sizeof(m) == 1) return -1; return strlen( implode(m[0..<3],"") ); } string sub( string s, string pat, string repl ){ mixed x; x = regexplode( s, pat ); if( sizeof(x) > 1 ) x[1] = repl; return implode(x,""); } string gsub( string s, string pat, string repl ){ return implode( split( s, pat ), repl ); } varargs string insensitive_pattern(string pat) { int i; int bracket; int patlen; string real_pat; patlen = strlen(pat); real_pat = ""; for(i=0;i<patlen;i++) { if(pat[i] == '[') { bracket++; real_pat += "["; } else if (pat[i] == ']') { bracket--; real_pat += "]"; } else if (pat[i] == '\\' && i+1 != patlen) { real_pat += pat[i..i+1]; i++; continue; } else if (pat[i] >= 'a' && pat[i] <= 'z' ) if(!bracket) real_pat += sprintf("[%c%c]",pat[i], pat[i] - 32); else real_pat += sprintf("%c%c",pat[i], pat[i] - 32); else if (pat[i] >= 'A' && pat[i] <= 'Z' ) if(!bracket) real_pat += sprintf("[%c%c]",pat[i]+32,pat[i]); else real_pat += sprintf("%c%c", pat[i]+32,pat[i]); else real_pat += pat[i..i]; } return real_pat; } varargs string* insensitive_regexp(string* arr, string pat, int flag) { return regexp(arr, insensitive_pattern(pat), flag); }