2013-05-08 63 views
2

我有一個包含(非Scala)轉義序列的輸入字符串,如\n,\s,\x20ac;\{$var}。我想通過將普通字符複製到輸出來創建輸出字符串,並對每個轉義序列應用一些處理,將處理結果複製到輸出。處理轉義序列和檢測結束位置的規則僅取決於反斜槓之後立即出現的字符。在Scala中擴展字符串中的轉義序列的習慣方式

在Scala中實現這一點的慣用方法是什麼?

回答

5

如何:

val r = """\\[ns]|\\x[a-f0-9]{4};|\\\{\$[a-z][a-z_0-9]+\}""".r 
val result = r.replaceAllIn(targetString, m => 
    // your logic. `m` is a Match. Use it to decide what to replace with. 
) 

看一看Regex

你甚至可以走得更遠,並使用漂亮的模式匹配:

import scala.util.matching.Regex.Match 
def handle(m: Match) = m match { 
    case Match("""\n""") => // do stuff 
    case _ => // etc. 
} 

val result = r.replaceAllIn(targetString, handle _) 
+0

整齊,我知道它是什麼簡單。 – 2013-05-08 23:18:01

+0

我實際上一直在尋找「走得更遠」的解決方案而沒有成功;但是因爲我可以在m.charAt(1)上做一個簡單的開關,所以它實際上並不需要。但是,我必須解決一個問題:如果包含任何「\」或「$」字符,替換字符串必須通過Regex.quoteReplacement。 – 2013-05-09 08:02:58