我知道那里的正则表达式实现,包括广泛用于C的POSIX版本。但是,它无处可用。而且我不需要完整的正则表达式。
所以我正在寻找一种使用单个通配符'*'匹配单个C字符串的简单方法。 E.g。
a*, b*c, *d
其中'*'表示匹配任意数量的字符。
答案 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
}