警告:未知的转义序列 '\

8

我正在尝试在代码中通过系统命令运行正则表达式,我已经阅读了StackOverflow上类似警告的帖子,但我不明白如何修复以下警告,它似乎只出现在做\\}时的关闭括号上。警告似乎消失了,但无法在重定向的文件中获得精确的输出。

#include<stdio.h>


int main(){

        FILE *in;
        char buff[512];

if(system("grep -o '[0-9]\{1,3\}\\.[0-9]\{1,3\}\\.[0-9]\{1,3\}\\.[0-9]\{1,3\}' /home/santosh/Test/text >t2.txt") < 0){
                printf("system failed:");
                exit(1);
        }
}

警告:

dup.c:9:11: warning: unknown escape sequence '\}'
dup.c:9:11: warning: unknown escape sequence '\}'
dup.c:9:11: warning: unknown escape sequence '\}'
dup.c:9:11: warning: unknown escape sequence '\}'
dup.c: In function 'main':

在C字符串字面值中,您不需要转义花括号。 - cadaniluk
1
@Downvoter,没错,但是grep需要这种语法([x-y]\{x,y})。 - David Ranieri
1个回答

10
在C语言中的字符串字面值中,\ 具有特殊含义,用于表示特定字符,例如换行符 \n。如果你想在字符串中放置一个 \,你需要使用 \\
例如:
"\\Hello\\Test"
实际结果将会是"\Hello\Test"。因此你的正则表达式需要写成:
"[0-9]\\{1,3\}\\\\.[0-9]\\{1,3\}\\\\.[0-9]\\{1,3\\}\\\\.[0-9]\\{1,3\\}"

改为:

"[0-9]\{1,3\}\\.[0-9]\{1,3\}\\.[0-9]\{1,3\}\\.[0-9]\{1,3\}"

这确实很痛苦,因为\既被用作正则表达式的转义字符,又被用作字符串字面量的转义字符。

所以基本上,当您想要输入\时,需要写成\\


仍然存在相同的问题。 - Santhosh Pai
忘记了两个 \\。问题已经被编辑过了。请再试一次。 - Jabberwocky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接