Java/Scala正则表达式

Java/Scala正则表达式,java,regex,scala,Java,Regex,Scala,我对正则表达式有点不熟悉。我有一根沿着下面几行的绳子 val str20 = "unit/virtual-ExtractMe/domain-testing-ExtracMe-IgnoreMe" 我想提取的单词是“提取我”(上面看到的第一个,就在域-之前。字符串的格式在开始时是相同的,但在第二个斜杠后会改变,我需要忽略在第二个斜杠后写入的内容。我的兴趣是获取在虚拟-和第二个/之间写入的内容。在这种情况下,它是单词ExtractMe的第一次出现。例如,如果我有 val str20 = "unit/

我对正则表达式有点不熟悉。我有一根沿着下面几行的绳子

val str20 = "unit/virtual-ExtractMe/domain-testing-ExtracMe-IgnoreMe"
我想提取的单词是“提取我”(上面看到的第一个,就在
域-
之前。字符串的格式在开始时是相同的,但在第二个斜杠后会改变,我需要忽略在第二个斜杠后写入的内容。我的兴趣是获取在
虚拟-
第二个/
之间写入的内容。在这种情况下,它是单词ExtractMe的第一次出现。例如,如果我有

val str20 = "unit/virtual-YouGotMe/domain-testing-ExtracMe-IgnoreMe"
正则表达式应该给我一个单词“YouGotMe”,因为它介于
virtual-和第二个正斜杠之间
这个
/virtual-(.*?)/
将给你一个组中的所有匹配项。你只需要得到第一个。请参阅:


在Scala正则表达式中,不需要转义
/
,但如果直接在Java中执行,则需要转义它们。

在Scala中,您可以使用
FindFirstMachin
提取第一个匹配的组,如下所示:

val pattern = """virtual-(.*?)/""".r

val str20 = "unit/virtual-ExtractMe/domain-testing-ExtracMe-IgnoreMe"

pattern.
  findFirstMatchIn(str20).
  map(_.group(1)).
  getOrElse("Error: No Match!!!")

res1: String = ExtractMe

val str20 = "unit/virtual-YouGotMe/domain-testing-ExtracMe-IgnoreMe"

pattern.
  findFirstMatchIn(str20).
  map(_.group(1)).
  getOrElse("Error: No Match!!!")

res2: String = YouGotMe

同意。竖起大拇指!@Seb要求介于
virtual-
和第二个正斜杠之间。
^.*virtual-(*)\/.*$
并不保证
/
是第二个。第一个
*
将使引擎匹配字符串中最后出现的
virtual-
,然后全部匹配到字符串中最后一个
/
。@WiktorStribiżew,我如何强制执行第二个斜杠检查?我将查看它。@curiousengineer查看我的ed它。如果你得到第一个组,它将与第二个正则表达式一起工作。我无法帮助,因为我不知道你的方法有什么问题。请分享你的尝试,看看哪里出了问题。