[英]Groovy regex not matching
我有命名為pkg-name.0.15.0-6.x86_64.rpm
的rpm
包。 我想從中提取兩個字符串:
pkg-name
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.