Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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,假设我想制作一个正则表达式,将可选版本号从文件名中分离出来,例如 val regex(name, ver) = "file.jar" // name = file, ver = empty val regex(name, ver) = "some-software.jar" // name = some-software, ver = empty val regex(name, ver) = "software-1.0.jar" // name = software, ver

假设我想制作一个正则表达式,将可选版本号从文件名中分离出来,例如

val regex(name, ver) = "file.jar"          // name = file, ver = empty
val regex(name, ver) = "some-software.jar" // name = some-software, ver = empty
val regex(name, ver) = "software-1.0.jar"  // name = software, ver = 1.0
val regex(name, ver) = "some-file-1.0.jar" // name = some-file, ver = 1.0
这样的正则表达式是如何用Scala/Java编写的?。在perl中,我将按照以下思路进行操作:

(.*)(\d |.*)?.jar


但是Scala不支持使用这种语法创建可选组。

我不确定您现在的问题是什么

我假设它与第二组不匹配,因为第一组是贪婪的,而第二组是可选的,所以第一组匹配所有内容

试试这个:

(.*?)(?:-(?=\d)(.*))?.jar
看到了吗

  • 我用
    *?
  • 第二个组是非捕获组(以
    (?:
    开头的组)。您现在可以在组1中找到名称,在组2中找到版本
  • 我在破折号后面放了一个前视,这样它就会搜索破折号后面跟一个数字
  • 那么:

    /^(.+?)(?:-([\d.]*))?\.jar$/
    

    假设这个版本总是由数字和点混合而成。

    非常感谢它能起作用,我将尝试重新表述我的问题,以便对扩展的解释更有意义。