Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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中将一个正则表达式模式替换为另一个正则表达式模式,是否有任何直接的功能可以用于它?或者我应该一个接一个地找到每个正则表达式并更改它 val string1 = "(value1 + value2) + max(value3, max(value4, value5))" //convert to val string2 = "(value1 + value2) + lmax[(value3, lmax[(value4, value5)])]" 所

我想在Scala中将一个正则表达式模式替换为另一个正则表达式模式,是否有任何直接的功能可以用于它?或者我应该一个接一个地找到每个正则表达式并更改它

    val string1 = "(value1 + value2) + max(value3, max(value4, value5))"     
    //convert to
    val string2 = "(value1 + value2) + lmax[(value3, lmax[(value4, value5)])]"
所以,我想把string1转换成string2,基本上是转换

     max(something) => lmax[(something)]

对不起,如果这是一个很幼稚的问题。我是Scala的新手。

首先,你的问题与Scala关系不大。这更像是一个正则表达式问题

其次,您并不是真的用另一个正则表达式模式替换一个正则表达式模式。您正在尝试处理嵌套的捕获组,而regex并不擅长这一点

事实上,比这更糟。您试图捕获由匹配括号分隔的组。再说一遍,regex在这方面并不擅长

考虑这个字符串

"value1 + max((value2 + value3), max(value4, value5))"
现在,在外部捕获组中有两组括号。第一组不是目标,应该忽略,而第二组是应该捕获和替换的目标。这不是一件小事

当然,如果有人在代码中加了一个换行符,那么你就被套住了

"max(value12
   + value13)"

在我看来,正则表达式不是这个工作的工具。(但我以前错了…)

那么我应该使用基于堆栈的求值,对吗?您需要编写一个解析器。