小编mik*_*ike的帖子

Bash posix 正则表达式可选组

试图从表单类别/名称版本中的字符串中匹配一些 Gentoo 包命名组件,由于其复杂性,我得出了这样的结论:

if [[ "$1" =~ ^([<>]?=?)(([^\/]+)\/)?([^[:space:]]+)-(([[:digit:]]+)?(\.([[:digit:]]+))*([a-z])?(_(alpha|beta|pre|rc|p)([[:digit:]]*))*(-(r([[:digit:]]+))?)?)?$ ]]; then
    # use "${BASH_REMATCH[n]}" here to capture groups contents
fi
Run Code Online (Sandbox Code Playgroud)

它按照预期分割字符串<category/package-name-12345.25b_rc10-r7

Version specifier: <
Category: category
Package name: package-name
Version: 12345.25b_rc10-r7
Version, major: 12345
Version, minor: 25
Version, letter: b
Version, patch type: rc
Version, patch level: 10
Version, revision number: 7
Run Code Online (Sandbox Code Playgroud)

现在,我需要匹配和分割可能缺少版本的字符串,例如category/package-name.

那么,有没有办法让上面的版本部分可选呢?

以上,这部分内容如下:

-(([[:digit:]]+)?(\.([[:digit:]]+))*([a-z])?(_(alpha|beta|pre|rc|p)([[:digit:]]*))*(-(r([[:digit:]]+))?)?)?
Run Code Online (Sandbox Code Playgroud)

我尝试将其更改为:

(-(([[:digit:]]+)?(\.([[:digit:]]+))*([a-z])?(_(alpha|beta|pre|rc|p)([[:digit:]]*))*(-(r([[:digit:]]+)))?))?
Run Code Online (Sandbox Code Playgroud)

它适用于没有版本的字符串,但似乎可选组阻止它匹配上面这样的稍微完整的字符串,它得到:

Version specifier: 
Category: category
Package name: package-name-12345.25b_rc10-r7
Version: 
Version, major: 
Version, minor: 
Version, letter: 
Version, patch type: 
Version, …
Run Code Online (Sandbox Code Playgroud)

bash posix regular-expression

0
推荐指数
1
解决办法
558
查看次数

标签 统计

bash ×1

posix ×1

regular-expression ×1