说我想制作一个正则表达式,从文件名中分割出一个可选的版本号,即
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。|)*)(*)。?罐
但Scala并不接受支持在此语法中创建可选组。
答案 0 :(得分:3)
我不确定你现在的问题是什么。
我认为它与第二组不匹配,因为第一组是贪婪的,因为第二组是可选的,所以第一组匹配所有内容。
试试这个:
(.*?)(?:-(?=\d)(.*))?.jar
.*?
(?:
开头的组。您将在组1中找到该名称,在组2中找到该名称。答案 1 :(得分:1)
怎么样:
/^(.+?)(?:-([\d.]*))?\.jar$/
假设版本总是混合数字和点。