Regex 理解Scala代码
我正在学习Scala 有人能解释一下下面的代码吗? 我试图去理解,但是不能Regex 理解Scala代码,regex,scala,Regex,Scala,我正在学习Scala 有人能解释一下下面的代码吗? 我试图去理解,但是不能 def resolveDollarVar(sqlStr: String, vars: Map[String, String]): String = { val varPattern = new scala.util.matching.Regex("""(\$\{(\S+?)\})""", "fullVar", "value") varPattern replaceAllIn (sqlStr, m => {
def resolveDollarVar(sqlStr: String, vars: Map[String, String]): String = {
val varPattern = new scala.util.matching.Regex("""(\$\{(\S+?)\})""", "fullVar", "value")
varPattern replaceAllIn (sqlStr, m => {
try {
vars(m.group("value"))
}
catch {
case e: NoSuchElementException => throw new NoSuchElementException("Error: " + m.group("fullVar") + " cannot be resolved")
}
})
}
快速访问将显示以下内容:
def replaceAllIn(目标:CharSequence,replacer:(匹配)⇒ 字符串):字符串
使用替换函数替换所有匹配项。替换函数
接受scala.util.matching.Regex.Match,以便可以显示额外的信息
从比赛中获得的。例如:
在替换字符串中,将显示后跟数字的美元符号($)
解释为对匹配模式中的组的引用,带有数字
1到9对应前九组,0代表
整场比赛。任何其他字符都是错误的。反斜杠(\)字符
将被解释为转义字符,并可用于转义
美元符号。使用Regex.quoteReplacement转义这些字符
因此m
是传递给replacer
lambda的Match
group()
是一种从Match
参数检索命名组的方法<代码>“值”是分配给正则表达式模式中两个捕获组之一的标签
因此:
sqlStr
。捕获感兴趣的子字符串并将其标记为“值”vars
映射replaceAllIn
将用从vars
映射检索的字符串替换标记为“value”的子字符串请具体说明您在哪些方面遇到了问题?我不理解“m”这个词,什么是vars(m.group(“value”))?我知道vars是一个Map变量,这个函数“(m.group(“value”)在Map上的作用是什么?
m
是匹配数据对象,value
是用捕获的文本(\S+?)
,并用作从映射中获取相应值的键。@Jee请将该信息编辑到您的问题中。您可以查看相关方法的签名,replaceAlIn
,看看这是否对您有帮助
import scala.util.matching.Regex
val datePattern = new Regex("""(\d\d\d\d)-(\d\d)-(\d\d)""", "year", "month", "day")
val text = "From 2011-07-15 to 2011-07-17"
val repl = datePattern replaceAllIn (text, m => s"${m group "month"}/${m group "day"}")