regex - 结合正则表达式以获得路径版本
问题描述
我想实现一个 Perl 正则表达式,它检查路径是否采用正确的格式,如果是,则采用版本。用一个例子来解释会更容易。考虑以下路径:
/bin/src/python/2.7.5/lib/re.py
我想检查这条路径是否开始/bin
并包含python
在其中。所以我用^/bin/.*/python/
. 但我也想2.7.5
通过某种方式将其插入到$1
.
它应该如下所示:
if ($path =~ "^/bin/.*/python/") {
$version = $1;
}
解决方案
如果版本号总是在 之后/python/
,你可以这样做:
if ($path =~ m{^/bin/.*/python/([^/]+)}) {
$version = $1;
}
这将抓取 . 之后的路径段(一系列非/字符)/python/
。
您可以更花哨一点,并尝试验证版本是否由虚线数字组成:
if ($path =~ m{^ /bin/ .* /python/ ( [0-9]+ (?: \. [0-9]+ )* ) / }x) {
$version = $1;
}
(这是事情变得混乱到打破x
标志以允许正则表达式中的空白的地方。)