2016-10-18 5 views
0

を期待通りに動作していない私はそれが出力として/tmp/16.1.o.00.01/run.c印刷され、以下のコードTCL:。

set src "/tmp/16.10c.00.01/run.c" 
regsub "\.c" $src ".o" obj 
puts "$obj" 

を持っています。 期待される出力は/tmp/16.10c.00.01/run.oです。 "\.c$"としておくと、期待通りに動作しています。 最初のコードで何が間違っていますか?正規表現で

.c 

以上がcに続く任意の文字を意味します。何が悪い

答えて

3

はインタプリタに渡される生の正規表現がされていることです

あなたがする必要があるのは、最初の2つのバックスラッシュをエスケープするために、2つのバックスラッシュを使用することです。 (最初の置換を防ぐ)見積それまたは使用中括弧:

regsub "\\.c" $src ".o" obj 
# or 
regsub {\.c} $src ".o" obj 
+0

がどのように正規表現で 『\ .C』 – Rupesh

+0

@Rupeshから「.C」異なっているが、 '.'それは(任意の1文字に一致しますワイルドカード)。ドットをマッチさせたい場合は、 '.'をエスケープする必要があります。そうしないとワイルドカードとして動作します。 – Jerry

+0

私はあなたが何を言おうとしているのか理解しました。私の視点は二重引用符からのみです。ドットをエスケープする二重引用符では、 "\"を入れなければなりません。エスケープするには\\を "\\"として書き直す必要があります。私の理解は正規表現 ".c"と "\ .c"は機能面で同じです。彼らは異なっていますが。私は正しい? – Rupesh