2017-02-03 5 views
-1

コード内のシステムコマンドで正規表現を実行しようとしていますが、同様の警告で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); 
     } 
} 

警告:\は特別な意味を持つCの文字列リテラルで

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

Cの文字列リテラルで中括弧をエスケープする必要はありません。 – Downvoter

+0

@Downvoter、trueですが、grepはこのsintaxis( '[x-y] \ {x、y}')を依頼します –

答えて

2

は、そのような行末\nなどの文字を表現するためです。文字列に\を入れる場合は、\\を使用する必要があります。

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

の代わりに、文字列リテラル。

基本的に:\を入れたいときは、\\と書く必要があります。

+0

は依然として同じ問題です –

+0

'\\'を忘れました。質問が編集されました。再試行する。 –

関連する問題