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

San*_*Pai 3 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);
        }
}
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)

Jab*_*cky 7

在 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\你需要写\\.