Groovy正则表达式不匹配

gzjq41n4  于 2022-11-01  发布在  其他
关注(0)|答案(2)|浏览(216)

我有一个名为pkg-name.0.15.0-6.x86_64.rpmrpm包,我想从中提取两个字符串:
1.只有名称,没有版本、发行版或体系结构。
1.然后,我想提取带有版本和发行版的名称。
我尝试了下面的代码,但我没有得到任何匹配,我不知道为什么

fullRpmName = "pkg-name.0.15.0-6.x86_64.rpm"
def matcher = (fullRpmName =~ /((.*)\\.\\d+\\.\\d+.\\d+-\\d+\\..*).x86_64\\.rpm/)
println matcher.group(1)
println matcher.group(2)
ar7v8xwq

ar7v8xwq1#

我修改了正则表达式以匹配包命名约定,您可以看到一个工作示例here

((.*)\.\d+\.\d+\.\d+-\d+)\.x86_64\.rpm
xghobddn

xghobddn2#

您可以使用

String fullRpmName = "pkg-name.0.15.0-6.x86_64.rpm"
    def matcher = fullRpmName =~ /^((.*?)\..*)\.x86_64\.rpm/
    if (matcher) {
        println matcher.group(2) // pkg-name
        println matcher.group(1) // pkg-name.0.15.0-6
}

请参阅Groovy demo online.请参阅regex demo

  • 详细数据 *
  • ^-字符串开始
  • ((.*?)\..*)-组1:
  • (.*?)-组2:除换行符以外的任何零个或多个字符,尽可能少
  • \.-一个点
  • .*-任何零个或多个字符,尽可能多的换行符字符除外
  • \.x86_64\.rpm-一个.x86_64.rpm字符串。

^(([^.]*)(?:[-.]\d+)*)\.x86_64\.rpm(请参阅demo)这样的正则表达式要复杂一些:

  • [^.]*-零个或多个字符(点除外)
  • (?:[-.]\d+)*--.得零次或多次重复,后跟一个或多个数字.

相关问题