在 Scala 的解析器组合JavaTokensParser
器中(特别是),有一个stringLiteral
与类似 Java 的字符串匹配的定义。有没有办法将 a 转换stringLiteral
为 a String
?例如,如果我解析"Run \" run \\ run"
我想将输入的字符串文字转换为Run " run \ run
.
另外,是否有 stringLiterals 的定义也支持"""
?
在 Scala 的解析器组合JavaTokensParser
器中(特别是),有一个stringLiteral
与类似 Java 的字符串匹配的定义。有没有办法将 a 转换stringLiteral
为 a String
?例如,如果我解析"Run \" run \\ run"
我想将输入的字符串文字转换为Run " run \ run
.
另外,是否有 stringLiterals 的定义也支持"""
?
Apache Commons 提供了一个有用的方法:StringEscapeUtils.escapeJava。
我有预感你在问一个更复杂的问题,但以防万一简单的答案是编写你自己的解析器并在应用程序之后修剪引号,^^。
在 REPL 中,您可以像这样测试它:
import scala.util.parsing.combinator.JavaTokenParsers
object testParsers extends JavaTokenParsers {
val aString : Parser[String] = stringLiteral ^^ {
case s => s.substring( 1, s.length-1 )
}
}
testParsers.parseAll(testParsers.stringLiteral,""""Run \" run \\ run"""")
testParsers.parseAll(testParsers.aString,""""Run \" run \\ run"""")
我不知道有任何内置的三引号解析器,所以我猜你将不得不自己动手。