C rm*的posix正则表达式是什么?

C rm*的posix正则表达式是什么?,c,regex,posix,C,Regex,Posix,我想为rm*编写一个posix正则表达式,其中rm和*之间可以有1到多个空格。下面是我提出的正则表达式。我已经在一些在线posix正则表达式测试仪上对它进行了测试,但它在我的程序中不起作用 正则表达式:^rm[:space:]+[*]$ regex_t regex; int reti; reti = regcomp(&regex, "^rm[[:space:]]+[*]$", 0); if( reti ){ fprintf(stderr, "Could not compile rege

我想为
rm*
编写一个posix正则表达式,其中
rm
*
之间可以有1到多个空格。下面是我提出的正则表达式。我已经在一些在线posix正则表达式测试仪上对它进行了测试,但它在我的程序中不起作用

正则表达式:
^rm[:space:]+[*]$

regex_t regex;
int reti;

reti = regcomp(&regex, "^rm[[:space:]]+[*]$", 0);
if( reti ){ fprintf(stderr, "Could not compile regex\n"); exit(1); }
reti = regexec(&regex, linux_command_1, 0, NULL, 0);
if( reti == REG_NOMATCH )
{
    system(linux_command_1); 
}

这个好像有用

^rm\s+\*$

+
是一种扩展的regexp功能。将
REG\u EXTENDED
标志传递给
regcomp

由于ERE中支持的
+
修饰符,它无法工作。(有关详细信息,请参阅。)

您需要将
cflags
设置为
REG\u EXTENDED
,即:

reti = regcomp(&regex, "^rm[[:space:]]+[*]$", REG_EXTENDED);

“不工作”是什么意思?它是否编译或不匹配您希望它匹配的字符串?它编译得很好。但是它与预期的字符串不匹配,例如“rm*”
“rm*”“rm-rf*”“rm*”“rm**”“rm**”“rm../*”
,而且还有很多字符串会超过您的检查。是的,谢谢您的建议。我会记住它,并据此设计正则表达式。我刚刚开始用posix编译和运行一个简单的正则表达式。谢谢,这正是我所需要的!