簡體   English   中英

Groovy 正則表達式不匹配

[英]Groovy regex not matching

我有命名為pkg-name.0.15.0-6.x86_64.rpmrpm包。 我想從中提取兩個字符串:

  1. 只是沒有版本、版本或架構的名稱。 所以在這種情況下,它將是pkg-name
  2. 然后我想用版本提取名稱並發布。 所以在這種情況下,它將是pkg-name.0.15.0-6

我在下面嘗試了這段代碼,但沒有得到任何匹配,我不知道為什么

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)

我修改了你的正則表達式以匹配 package 命名約定,你可以在這里看到一個工作示例:

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

您可以使用

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 演示 請參閱正則表達式演示

細節

  • ^ - 字符串的開頭
  • ((.*?)\..*) - 第 1 組:
    • (.*?) - 第 2 組:除換行符之外的任何零個或多個字符盡可能少
    • \. - 一個點
    • .* - 盡可能多的除換行符以外的任何零個或多個字符
  • \.x86_64\.rpm - 一個.x86_64.rpm字符串。

更復雜一點的是像^(([^.]*)(?:[-.]\d+)*)\.x86_64\.rpm這樣的正則表達式(參見演示):

  • [^.]* - 除點以外的零個或多個字符
  • (?:[-.]\d+)* - 零次或多次重復-. 后跟一個或多個數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM