add metachars '\i' and '\f' to regexp for interger and floating point number chars
This commit is contained in:
@ -39,6 +39,10 @@
|
||||
* '\W' Non-alphanumeric
|
||||
* '\d' Digits, [0-9]
|
||||
* '\D' Non-digits
|
||||
* '\i' Integer chars, [0-9], '+' and '-'
|
||||
* '\I' Non-integers
|
||||
* '\f' Floating point number chars, [0-9], '.', 'e', 'E', '+' and '-'
|
||||
* '\F' Non-floats
|
||||
*
|
||||
* *NOT* supported:
|
||||
* '[^abc]' Inverted class
|
||||
@ -307,6 +311,7 @@ extern "C" {
|
||||
|
||||
enum { UNUSED, DOT, BEGIN, END, QUESTIONMARK, STAR, PLUS,
|
||||
CHAR, CHAR_CLASS, INV_CHAR_CLASS, DIGIT, NOT_DIGIT,
|
||||
INTEGER, NOT_INTEGER, FLOAT, NOT_FLOAT,
|
||||
ALPHA, NOT_ALPHA, WHITESPACE, NOT_WHITESPACE /*, BRANCH */ };
|
||||
|
||||
typedef struct regex_t {
|
||||
@ -324,6 +329,8 @@ extern "C" {
|
||||
static int matchplus(regex_t p, regex_t *pattern, const char *text);
|
||||
static int matchone(regex_t p, char c);
|
||||
static int matchdigit(char c);
|
||||
static int matchint(char c);
|
||||
static int matchfloat(char c);
|
||||
static int matchalpha(char c);
|
||||
static int matchwhitespace(char c);
|
||||
static int matchmetachar(char c, const char *str);
|
||||
@ -395,6 +402,10 @@ extern "C" {
|
||||
/* Meta-character: */
|
||||
case 'd': { re_compiled[j].type = DIGIT; } break;
|
||||
case 'D': { re_compiled[j].type = NOT_DIGIT; } break;
|
||||
case 'i': { re_compiled[j].type = INTEGER; } break;
|
||||
case 'I': { re_compiled[j].type = NOT_INTEGER; } break;
|
||||
case 'f': { re_compiled[j].type = FLOAT; } break;
|
||||
case 'F': { re_compiled[j].type = NOT_FLOAT; } break;
|
||||
case 'w': { re_compiled[j].type = ALPHA; } break;
|
||||
case 'W': { re_compiled[j].type = NOT_ALPHA; } break;
|
||||
case 's': { re_compiled[j].type = WHITESPACE; } break;
|
||||
@ -467,6 +478,16 @@ extern "C" {
|
||||
return ((c >= '0') && (c <= '9'));
|
||||
}
|
||||
|
||||
static int matchint(char c)
|
||||
{
|
||||
return (matchdigit(c) || (c == '-') || (c == '+'));
|
||||
}
|
||||
|
||||
static int matchfloat(char c)
|
||||
{
|
||||
return (matchint(c) || (c == '.') || (c == 'e') || (c == 'E'));
|
||||
}
|
||||
|
||||
static int matchalpha(char c)
|
||||
{
|
||||
return ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z'));
|
||||
@ -502,6 +523,10 @@ extern "C" {
|
||||
switch (str[0]) {
|
||||
case 'd': return matchdigit(c);
|
||||
case 'D': return !matchdigit(c);
|
||||
case 'i': return matchint(c);
|
||||
case 'I': return !matchint(c);
|
||||
case 'f': return matchfloat(c);
|
||||
case 'F': return !matchfloat(c);
|
||||
case 'w': return matchalphanum(c);
|
||||
case 'W': return !matchalphanum(c);
|
||||
case 's': return matchwhitespace(c);
|
||||
@ -544,6 +569,10 @@ extern "C" {
|
||||
case INV_CHAR_CLASS: return !matchcharclass(c, (const char *)p.ccl);
|
||||
case DIGIT: return matchdigit(c);
|
||||
case NOT_DIGIT: return !matchdigit(c);
|
||||
case INTEGER: return matchint(c);
|
||||
case NOT_INTEGER: return !matchint(c);
|
||||
case FLOAT: return matchfloat(c);
|
||||
case NOT_FLOAT: return !matchfloat(c);
|
||||
case ALPHA: return matchalphanum(c);
|
||||
case NOT_ALPHA: return !matchalphanum(c);
|
||||
case WHITESPACE: return matchwhitespace(c);
|
||||
|
||||
Reference in New Issue
Block a user