警告:未知逃脱序列' \

时间:2017-02-03 11:04:13

标签: c regex

我试图通过代码中的系统命令运行正则表达式,我已经通过类似警告的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':

1 个答案:

答案 0 :(得分:3)

在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\}"

当然这很痛苦,因为\用作正则表达式的转义字符,并再次用作字符串文字的转义字符。

所以基本上:当你想要\时,你需要写\\