On Thu, 7 Jun 2001, Torgny 'Artovil' Bjers wrote:
> If there is no built in regexp checking, what do I need to be able to make
> a regexp check in Circle?
It depends upon your platform. glibc includes regular expression matching
functions as a default, see regcomp(3). An example of their use
#include <regex.h>
static regex_t *x_badEmailArray = NULL;
static uint x_szBadEmailArray = 0;
void log_regex_error(int err, const regex_t *rx)
{
char buf[MAX_STRING_LENGTH];
regerror(err, rx, buf, MAX_STRING_LENGTH);
log("regex: %s", buf);
}
int read_bad_emails(void)
{
char line[MAX_INPUT_LENGTH];
FILE *fp;
int err;
int i;
if (!(fp = fopen(BAD_EMAIL_FILE, "r"))) {
perror(BAD_EMAIL_FILE);
return (-1);
}
while (get_line(fp, line))
x_szBadEmailArray++;
rewind(fp);
CREATE(x_badEmailArray, regex_t, x_szBadEmailArray);
i = 0;
while (get_line(fp, line) && i < x_szBadEmailArray) {
err = regcomp(&x_badEmailArray[i], line,
REG_EXTENDED | REG_ICASE | REG_NOSUB);
if (err) {
log_regex_error(err, &x_badEmailArray[i]);
continue;
}
}
fclose(fp);
return (0);
}
bool is_bad_email(const char *addr)
{
int err;
int i;
/* regexec(3) returns 0 on match, REG_NOMATCH on mismatch. */
for (i = 0; i < x_szBadEmailArray; i++)
if (!regexec(&x_badEmailArray[i], addr, 0, NULL, 0))
break;
return (i < x_szBadEmailArray);
}
If your platform doesn't have a regular expression library available by
default, you'll have to find one. I don't know any off the top of my
head, but that's why the gods made Google. A quick search revealed the
Perl Compatible Regular Expression library, which appears to be portable
and powerful, if a bit overkill for just matching needs:
http://www.pcre.org/
Point to be made: regular expressions are probably overkill for almost
everything you'd want to do with your Mud. What are you trying to do,
exactly? There's probably a considerably more concise way to pull it off
than by using regex.
--
Daniel A. Koepke (dak), dkoepke@circlemud.org
Caveat emptor: I say what I mean and mean what I say. Listen well.
Caveat venditor: Say what you mean, mean what you say. Say it well.
--
+---------------------------------------------------------------+
| FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
| Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
+---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/05/01 PST