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 52 53
|
/*
* Worldvisions Weaver Software:
* Copyright (C) 1997-2004 Net Integration Technologies, Inc.
*
* Implementation of regular expression support though libc
*/
#include "wvregex.h"
WvString WvRegex::__wvre_null_reg;
const int WvRegex::default_cflags = WvRegex::EXTENDED;
const int WvRegex::default_eflags = 0;
void WvRegex::seterr(int errcode)
{
int error_desc_len = ::regerror(errcode, &preg, NULL, 0);
if (error_desc_len > 0)
{
WvString error_desc;
error_desc.setsize(error_desc_len);
::regerror(errcode, &preg, error_desc.edit(), error_desc_len);
WvErrorBase::seterr_both(errcode, error_desc);
}
else WvErrorBase::seterr(errcode);
}
bool WvRegex::set(WvStringParm regex, int cflags)
{
if (have_preg) ::regfree(&preg);
int errcode = ::regcomp(&preg, regex, cflags);
if (errcode)
{
seterr(errcode);
have_preg = false;
}
else have_preg = true;
return have_preg;
}
WvRegex::~WvRegex()
{
if (have_preg) ::regfree(&preg);
}
bool WvRegex::match(WvStringParm string, int eflags,
size_t nmatch, regmatch_t pmatch[]) const
{
if (!have_preg) return false;
return ::regexec(&preg, string, nmatch, pmatch, eflags) == 0;
}
|