使用*作为通配符匹配C中的字符串

时间:2013-12-26 20:47:26

标签: c regex wildcard

我知道那里的正则表达式实现,包括广泛用于C的POSIX版本。但是,它无处可用。而且我不需要完整的正则表达式。

所以我正在寻找一种使用单个通配符'*'匹配单个C字符串的简单方法。 E.g。

a*, b*c, *d

其中'*'表示匹配任意数量的字符。

3 个答案:

答案 0 :(得分:4)

您希望查看glob(3)fnmatch(3),而不是使用POSIX正则表达式。

否则,只需转义需要在RE中转义的所有字符(例如.)并将*转换为.*并粘贴^$根据需要(并将^.*.*$更改为空字符串)。

答案 1 :(得分:0)

我认为很多正则表达式实现都是开源的,所以你可以从中获得一些想法。

正如你所拥有的,我认为你可以使用strchr和/或strstr轻松构建一些东西,但它们不一定是“正确的”正则表达式,因为它们不会贪婪(例如匹配b * c反对bacac会找到第一个c而不是第二个c)。根据您的需要,这可能就足够了。

答案 2 :(得分:-1)

没有正则表达式的这个可能是 这样的事情?

 char *pChrA = NULL;
 char *pChrB = NULL;
 char *pChrC = NULL;
 char *pChrD = NULL;

 // A*
 if ( (pChrA=strchr( pChrStrSart,'A' )) != NULL )
 {
     //  string from pChrA to pChrStrEnd

 }

 // B*C
 if ( (pChrB=strchr( pChrStrSart,'B' )) != NULL )
 {
      if ( (pChrC=strrchr( (char *)(pChrB+1),'C' )) != NULL )
         //  string from pChrB to pChrC

 }

 // *D
 if ( (pChrD=strrchr( pChrStrSart,'D' )) != NULL )
 {
     //  string from pChrStrSart to pChrD

 }