首页 > 解决方案 > 使用正则表达式在 C 中设置正确的正则表达式的问题

问题描述

我想匹配以一组字符开头的所有字符串a-z,然后正好匹配一个:和另一组字符a-z

例如,字符串"an:example"将是正确的匹配项。

另一个例子,"another:ex:ample"需要是不匹配的。

我试图这样设置它,但它匹配所有内容,即使我将错误的字符串作为输入:(

所以我的正则表达式是"[a-z]:[a-z]",但它将字符串评估"1an:example"匹配:/

我怎样才能正确地做到这一点?

#include <stdio.h>
#include <regex.h>

int main() {
   regex_t regex;
   int retis;
   char* str = "1an:example";
   
   retis = regcomp(&regex, "[a-z]:[a-z]", 0);
   retis = regexec(&regex, str, 0, NULL, 0);
   
   if(!retis) {
      puts("Match");
   }
   else if(retis == REG_NOMATCH) {
      puts("No match");
   }
   
   regfree(&regex);
   return 0;
}

标签: cregex

解决方案


你需要

retis = regcomp(&regex, "^[a-z]+:[a-z]+$", REG_EXTENDED);

请参阅C 在线演示

那是:

  • ^(字符串开头)和$(字符串结尾)是需要正则表达式匹配整个字符串的锚点
  • [a-z]+匹配一个或多个小写字母
  • REG_EXTENDED允许扩展正则表达式语法,例如regex.h需要启用$锚点。

推荐阅读