我正在尝试通过代码中的系统命令运行正则表达式,我已经浏览了 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);
}
}
Run Code Online (Sandbox Code Playgroud)
警告:
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':
Run Code Online (Sandbox Code Playgroud)
在 C 字符串文字中\具有特殊含义,它用于表示诸如行尾之类的字符\n。如果要将 a\放入字符串中,则需要使用\\.
例如
"\\Hello\\Test"
Run Code Online (Sandbox Code Playgroud)
实际上会导致“\Hello\Test”。
所以你的正则表达式需要写成:
"[0-9]\\{1,3\}\\\\.[0-9]\\{1,3\}\\\\.[0-9]\\{1,3\\}\\\\.[0-9]\\{1,3\\}"
Run Code Online (Sandbox Code Playgroud)
代替:
"[0-9]\{1,3\}\\.[0-9]\{1,3\}\\.[0-9]\{1,3\}\\.[0-9]\{1,3\}"
Run Code Online (Sandbox Code Playgroud)
当然这很痛苦,因为它\被用作正则表达式的转义字符,并再次用作字符串文字的转义字符。
所以基本上:当你想把 a\你需要写\\.