scala - как заменить значение env на другую переменную с помощью регулярных выражений - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть переменная аа, которая имеет ссылку на переменную окружения. И мне нужно заменить значение с помощью регулярных выражений

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

Ожидаемый результат:

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}
 ^

что не так с регулярным выражением

1 Ответ

1 голос
/ 01 мая 2020

Сложно сказать, но я думаю, что вы получите то, что вам нужно.

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 значения извлекаются и подставляются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...