我正试图通过代码中的系统命令运行regex,我已经在StackOverflow中查看了类似警告的线程,但我不明白如何修复以下警告,它似乎只适用于doing\\}的闭括号。警告似乎消失了,但无法在重定向的文件中获得确切的输出。
#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字符串文字中,有一个特殊的含义,它用于表示字符,如行尾
n
。如果要在字符串中放入,则需要使用
\
。
例如
"\Hello\Test"
实际上会导致"\Hello\Test"。
因此,您的regexp需要写成:
"[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}"
当然,这很痛苦,因为被用作正则表达式的转义符,又被用作字符串文字的转义符。
所以基本上:当你想放一个时,你需要写
\
。