viewing paste topic/4855- regexp | 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
#include "common/hercules.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "map/script.h"
#include "map/npc.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 1273 times, submitted by AnnieRuru.