NAME¶
rgxg_number_range, rgxg_number_greaterequal - create regex that matches integers
in the given range
SYNOPSIS¶
#include <rgxg/number.h>
int rgxg_number_range (long long first, long long last, int base,
size_t min_length, char *regex, rgxg_options_t options);
int rgxg_number_greaterequal (long long number, int base,
size_t min_length, char *regex, rgxg_options_t options);
DESCRIPTION¶
rgxg_number_range() generates the (extended) regular expression that
matches integers in the range between
first and
last.
rgxg_number_greaterequal() generates the (extended) regular expression
that matches integers greater than or equal to
number.
The base of the matched integers is specified by
base, which must be
between 2 and 32 inclusive. Note that for bases greater than 16 the
"extended hex" alphabet is used (referenced as 'base32hex' in
RFC
4648).
If
RGXG_LEADINGZERO or
RGXG_VARLEADINGZERO is set, then
min_length specifies the minimum length of the matched integers
(otherwise the argument is ignored). For instance the number 5 with
min_length set to 3 and options set to
RGXG_LEADINGZERO is
matched as '005'. By default the number of leading zeros depends on the length
of the
last number. If
min_length is lesser than or equal to the
number of digits of
last, the value has no effect.
The generated regular expression is written to the character string
regex, including the terminating null byte ('\0'), unless
RGXG_NONULLBYTE is set. If
regex is NULL the return value is the
number of characters (excluding the terminating null byte) that would have
been written in case
regex has been initialized. Note that the
functions assume an arbitrarily long
regex string, callers must
ensure that the given string is large enough to not overflow the actual
space.
options is either zero, or the bitwise-
or of one or more of the
following macros:
- RGXG_NOUPPERCASE
- The generated regular expression only matches lower case
letters for base values greater than 10. The default is to match
both lower and upper case letters.
- RGXG_NOLOWERCASE
- The generated regular expression only matches upper case
letters for base values greater than 10. The default is to match
both lower and upper case letters.
- RGXG_NOOUTERPARENS
- Omit the outer parenthesis, if any, of the regular
expression.
- RGXG_LEADINGZERO
- The generated regular expression only matches integers with
leading zeros (e.g. the integer 5 is only matched as '005'). The number of
leading zeros is influenced by the min_length argument (see above).
By default no leading zeros are matched.
- RGXG_VARLEADINGZERO
- The generated regular expression matches integers with a
variable number of leading zeros (e.g. the number 5 is matched as '5',
'05' and '005'). The maximum number of leading zeros is influenced by the
min_length argument (see above). By default no leading zeros are
matched.
- RGXG_NONULLBYTE
- Do not add the terminating null byte ('\0') to the
regex string.
Note that
RGXG_NOUPPERCASE and
RGXG_NOLOWERCASE as well as
RGXG_LEADINGZERO and
RGXG_VARLEADINGZERO are mutual exclusive
options.
RETURN VALUE¶
Upon successful return, these functions return the number of characters
(excluding the terminating null byte) written to
regex.
If an error occurs, a (negative) error code is returned (see
ERRORS
section).
ERRORS¶
The following errors can be returned:
- RGXG_ERROR_RANGE (rgxg_number_range()
only)
- Invalid range (e.g. first number is greater than
last number).
- RGXG_ERROR_BASE
- The base is lesser than 2 or greater than 32.
- RGXG_ERROR_NEGARG
- At least one argument is negative.
- RGXG_ERROR_ARG2BIG
(rgxg_number_greaterequal() only)
- The value of number is too large.
- RGXG_ERROR_MUTEXOPTIONS
- Two mutual exclusive options were specified.
AVAILABILITY¶
These functions are available since rgxg 0.1.
SEE ALSO¶
regex(7),
rgxg_net_cidr_ipv4(3),
rgxg_net_cidr_ipv6(3),
rgxg_net_cidr_string(3).
AUTHOR¶
Hannes von Haugwitz <hannes@vonhaugwitz.com>