具有扩展语法的POSIX正则表达式与应该匹配的位置不匹配

时间:2015-09-19 05:08:39

标签: c regex posix posix-ere

我正在尝试在C中使用POSIX正则表达式,但它无法正常工作。这是我的代码:

int regi(char *c, char *e)
{
    regex_t regex;
    int reti = regcomp(&regex, e, 0);
    reti = regexec(&regex, c, 0, NULL, 0);

    if(!reti)
        return 1;

    return 0;
}

int main()
{
   char str[5] = {'0','x','2','F'};

   if(regi(str, "^(0[xX])[0-9a-fA-F]+"))
      // Do stuff

   return 0;
}

我在这里看:http://www.peope.net/old/regex.html

这永远不会进入if语句。

2 个答案:

答案 0 :(得分:5)

要使用 if(SKPaymentQueue.canMakePayments()) { let productID:NSSet = NSSet(objects: "com.organization.appname.iap") let request: SKProductsRequest = SKProductsRequest(productIdentifier: productID as Set<NSObject>) request.delegate = self request.start() } 元字符,您需要告诉+您正在使用extended POSIX syntax

regcomp()

此代码还存在其他一些问题,包括将int reti = regcomp(&regex, e, REG_EXTENDED); 转换为const char*,并忽略char*的返回值。

答案 1 :(得分:3)

我从来没有完全掌握不同版本的正则表达式,但我似乎basic regexes不知道限定词Show.joins(:contributions) .select('shows.*, COUNT(contributions.id) AS guest_count') .where('contributions.role_id = 2') .where('contributions.person_id IN (?)', self.id) .group("shows.id") .order('guest_count desc') ,只知道+

一种解决方案是使用扩展的正则表达式。编写正则表达式时必须指定:

*

(我认为reti = regcomp(&regex, e, REG_EXTENDED); 可以在基本正则表达式中使用+进行模拟,但这并不起作用。)