Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.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
Regex 理解Scala代码_Regex_Scala - Fatal编程技术网

Regex 理解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 => {

我正在学习Scala

有人能解释一下下面的代码吗? 我试图去理解,但是不能

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
参数检索命名组的方法<代码>“值”是分配给正则表达式模式中两个捕获组之一的标签

因此:

  • 使用Regex解析输入
    sqlStr
    。捕获感兴趣的子字符串并将其标记为“值”
  • 检索标记为“value”的字符串,并将其用于索引
    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"}")