Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中扩展字符串中转义序列的惯用方法_Scala - Fatal编程技术网

在Scala中扩展字符串中转义序列的惯用方法

在Scala中扩展字符串中转义序列的惯用方法,scala,Scala,我有一个输入字符串,其中包含(非Scala)转义序列,例如\n,\s,\x20ac和\{$var}。我想通过将普通字符复制到输出,并对每个转义序列应用一些处理,将处理结果复制到输出,来创建一个输出字符串。处理转义序列和检测转义序列结束位置的规则仅取决于紧跟在反斜杠之后出现的字符 在Scala中实现这一点的惯用方法是什么?这个怎么样: val r = """\\[ns]|\\x[a-f0-9]{4};|\\\{\$[a-z][a-z_0-9]+\}""".r val result = r.repl

我有一个输入字符串,其中包含(非Scala)转义序列,例如
\n
\s
\x20ac
\{$var}
。我想通过将普通字符复制到输出,并对每个转义序列应用一些处理,将处理结果复制到输出,来创建一个输出字符串。处理转义序列和检测转义序列结束位置的规则仅取决于紧跟在反斜杠之后出现的字符

在Scala中实现这一点的惯用方法是什么?

这个怎么样:

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.
)
看看

您甚至可以更进一步,使用漂亮的模式匹配:

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 _)

奈特,我知道这必须是件容易的事。实际上,我一直在寻找“更进一步”的解决方案,但没有成功;但是因为我可以在m.charAt(1)上做一个简单的切换,所以实际上并不需要它。但是,有一个问题我必须解决:如果替换字符串包含任何“\”或“$”字符,则必须通过Regex.quoteReplacement进行替换。