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