viewing paste regexp_libpcre | C

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
#include "common/hercules.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "map/npc.h"
#include "map/script.h"
#include "../3rdparty/pcre/include/pcre.h"
#include <pcre/include/pcre.h>
 
#include "common/strlib.h"
#include "common/HPMDataCheck.h" // should always be the last file included! (if you don't make it last, it'll intentionally break compile time)
 
HPExport struct hplugin_info pinfo = {
        "regexp",               // Plugin name
        SERVER_TYPE_MAP,// Which server types this plugin works with?
        "0.1",                  // Plugin version
        HPM_VERSION,    // HPM Version (don't change, macro is automatically updated)
};
 
BUILDIN(regexp) {
        pcre *re;
        pcre_extra *pcreExtra;
        const char *error;
        int erroffset, r, offset = 0;
        int subStrVec[30];
 
        const char* pattern = script_getstr(st,2);
        const char* subject = script_getstr(st,3);
        if (script_hasdata(st,4))
                offset = script_getnum(st,4);
 
        re = libpcre->compile(pattern, 0, &error, &erroffset, NULL);
        pcreExtra = libpcre->study(re, 0, &error);
 
        r = libpcre->exec(re, pcreExtra, subject, (int)strlen(subject), offset, 0, subStrVec, 30);
 
        libpcre->free(re);
        if (pcreExtra != NULL)
                libpcre->free(pcreExtra);
 
        if (r < 0)
                script_pushint(st,0);
        else
                script_pushint(st,(r > 0) ? r : 30 / 3);
 
        return true;
}
 
HPExport void plugin_init (void) {
        addScriptCommand( "regexp", "ss?", regexp );
}
Viewed 838 times, submitted by AnnieRuru.