在Scala的解析器组合器中(特别是JavaTokensParser),有一个名为stringLiteral的定义,用于匹配类似Java的字符串。
def stringLiteral: Parser[String] =
("\""+"""([^"\p{Cntrl}\\]|\\[\\'"bfnrt]|\\u[a-fA-F0-9]{4})*"""+"\"").r
不幸的是,这个正则表达式 对于长字符串不起作用。 有人知道一个可重复使用的实现吗?或者有一个更节省空间的正则表达式修改方法吗?
"\\ns" * 2500
时,仍然会溢出。("\"" + """([^"\p{Cntrl}\\]*(?:\\[\\'"bfnrt])*(?:\\u[a-fA-F0-9]{4})*)*""" + "\"").r
. - schmmd