2009-03-10 27 views
0

Bir C# aracı kullanarak C++ dosyalarına literal dizeleri eklemeye çalışıyorum ve otomatik olarak kaçak ekleyerek görevlendirildim.C++ Re'de C++ kodunu Kaçış

"=> \" ile başlamak için. Ancak

public String AddEscapeCharactersForCode(String content) 
    { 
     String escaper = "\\\\"; 
     String ncontent = Regex.Replace(content, "\\\\\""); 
     ncontent = Regex.Replace(ncontent, "'", "\\\\'"); 
     ncontent = Regex.Replace(ncontent, "\n", "\\\\\n"); 
     return content; 
    } 

Yukarıdaki kod çıkış karaktersiz tırnak ve kırık kod dosyaları = (

+0

Neden C# verbatim dizeleri kullanılmıyor? Ben "\\" yi "\\\\" dan çok daha okunabilir buluyorum. –

+0

ama daha sonra " –

+0

" dan ya da "@" \\ "+" \ "" '(derleme zamanında da değerlendirilir) ile yapabilirsiniz. –

cevap

4

Eh,' sonuçlanan benim dizeleri için hiçbir şey yok "\ olarak" örneklerini dönüştürmek için gerekli olan normal ifadeyi çözemiyorum var ettik.

basitçe So, o Regex.Replace iyilik her geçirilen dize döndürür
// ... 
return content; 

... atılır alır

+0

Alternatif olarak, "iade ncontent;" kullanın – luiscubal

3

bu simp için. le görev, gerçekten bir regexp gerekmez. String.Replace() kullanımı basittir.

String.Replace

bu durumda belirtilen bir Unicode karakter veya dize tüm oluşumları başka Belirtilen Unicode karakter veya dize ile ikame edildiği yeni bir dize döndürür Yöntemi. Eğer regex ile bunu gerekiyorsa

s1 = "some \"parts\" may be \"quoted\" here" 
// s1 is <some "parts" may be "quoted" here> 
s2 = s.replace("\"", "\\\"") 
// s2 is <some \"parts\" may be \"quoted\" here> 
1

, tek adımda tersbölüleri ve çift tırnak kolları normal bir ifade kullanarak yedek sayısını en aza indirmek.

public String AddEscapeCharactersForCode(String content) 
{ 
    content = Regex.Replace(content, "[\"\\\\]", "\\$&"); 
    content = Regex.Replace(content, "\n", "\\n"); 
    return content; 
} 

Örneğinizde çok fazla ters eğik çizgi var. Bana göre yukarıdaki çıktılar doğru görünüyor.