标题: 正则表达式问题请教!
littlestar
LU幼天使
Rank: 2



UID 29787
精华 0
积分 99
帖子 177
活跃指数 25
LU金币 2197 个
LU金条 0 个
阅读权限 20
注册 2005-2-26
 
发表于 2006-9-15 15:49  资料  个人空间  主页 短消息  加为好友 
正则表达式问题请教!

POSIX有库函数支持“正则表达式”(regular expression),下面是我的使用方法:

#include <regex.h>

int main()
{
  size_t i, k, n;
  regex_t RegHandle;
  char* Name = "A01B49/02";
  char* Pattern = "^(\\D)(\\d+)(\\D)(\\d+)\\/(.*)$";
  regmatch_t Matchs[256];
  char Result[256];

  k = regcomp(&RegHandle, Pattern, REG_EXTENDED);
  if (k != 0) return 0;
  n = regexec(&RegHandle, Name, 256, Matchs, 0);
  if (n == 0) for (i = 0; i <= RegHandle.re_nsub; i++)
  {
    if ((Matchs.rm_so < 0) || (Matchs.rm_eo < 0)) continue;
    n = Matchs.rm_eo - Matchs.rm_so;
    if (n >= 255 - k)
    {
      n = 255 - k;
      if (n == 0) break;
    }
    memcpy(Result + k, Name + Matchs.rm_so, n);
    k += n;
  }
  printf("%d\t%d\n", (int)n, (int)k);
  printf("%s\t%s\n", Pattern, Name);
  regfree(&RegHandle);
  Result[k] = 0;
  return 1;
}

可是regexec总是返回1(没有匹配),有谁知道问题出在哪里?请指点,谢谢。

[ 本帖最后由 littlestar 于 2006-9-28 11:47 编辑 ]

顶部
triphop
LU幼天使
Rank: 2


UID 13166
精华 0
积分 70
帖子 115
活跃指数 17
LU金币 2106 个
LU金条 0 个
阅读权限 20
注册 2004-2-27
 
发表于 2006-9-30 12:30  资料  个人空间  短消息  加为好友 
Try again, do not use Perl regex syntax!

    char* Pattern = "^([[:alpha:]])([[:digit:]]+)([[:alpha:])([[:digit:]]+)/(.*)$";
    char* Pattern = "^([[:alpha:]])([[:digit:]]+)([[:alpha:]])([[:digit:]]+)/(.*)$";
    char* Pattern = "^([^[:digit:]])([[:digit:]]+)([^[:digit:]])([[:digit:]]+)/(.*)$";
    char* Pattern = "^([^0-9])([0-9]+)([^0-9])([0-9]+)/(.*)$";

顶部
littlestar
LU幼天使
Rank: 2



UID 29787
精华 0
积分 99
帖子 177
活跃指数 25
LU金币 2197 个
LU金条 0 个
阅读权限 20
注册 2005-2-26
 
发表于 2006-10-8 09:59  资料  个人空间  主页 短消息  加为好友 
opensource的gnu regex的C库好像目前是0.12版本,好多年没有更新了。
java中的regex更新很快。

顶部
 



当前时区 GMT+8, 现在时间是 2008-12-5 19:36
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.054394 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver