我试图通过代码中的系统命令运行正则表达式,我已经通过类似警告的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':
答案 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\}"
当然这很痛苦,因为\
用作正则表达式的转义字符,并再次用作字符串文字的转义字符。
所以基本上:当你想要\
时,你需要写\\
。