繁体   English   中英

scala - 如何使用正则表达式将 env 值替换为另一个变量

[英]scala - how to substitute env value for another variable using regex

我有一个引用环境变量的变量 aa。 我需要使用正则表达式替换值

Name = TEMP
Value = C:\Users\asus101\AppData\Local\Temp
aa: String = "${TEMP}_Report"

预期 output:

p2:  C:\Users\asus101\AppData\Local\Temp_Report

我试过的代码

import scala.collection.JavaConversions._

   val aa = "${TEMP}\\Report"
    for ((name,value) <- System.getenv() ) {
       val p1 = """\${XX}""".replace("XX",name).r
      val p2 = p1.replaceAllIn(aa,value)
      if(name=="TEMP") {
        println("Name = " + name)
        println("Value = " + value)
        println("p2 = " + p2 )
      }

我得到的错误是

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 1
\${USERDOMAIN_ROAMINGPROFILE}
 ^

正则表达式有什么问题

这有点难说,但我认为这就是你所追求的。

import scala.util.Properties._

val pttrn = raw".*(\$$\{\s*(\w+)\s*\})".r
val strA = "${ME}:my ${HOME} is Gnome and my ${BROWSER} is     fine."

val strB =
  strA.split("(?<=})").map {
    case s @ pttrn(a,b) => envOrNone(b).fold(s)(s.replace(a,_))
    case s => s
  }.mkString
//strB: String = ${ME}:my /home/jwvh is Gnome and my firefox is     fine.

我的环境中没有$ME ,所以没有替换,但是$HOME$BROWSER值被拉出并替换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM