首页 > 解决方案 > 结合正则表达式以获得路径版本

问题描述

我想实现一个 Perl 正则表达式,它检查路径是否采用正确的格式,如果是,则采用版本。用一个例子来解释会更容易。考虑以下路径:

/bin/src/python/2.7.5/lib/re.py

我想检查这条路径是否开始/bin并包含python在其中。所以我用^/bin/.*/python/. 但我也想2.7.5通过某种方式将其插入到$1.

它应该如下所示:

if ($path =~ "^/bin/.*/python/") {
    $version = $1;
}

标签: regexperl

解决方案


如果版本号总是在 之后/python/,你可以这样做:

if ($path =~ m{^/bin/.*/python/([^/]+)}) {
    $version = $1;
}

这将抓取 . 之后的路径段(一系列非/字符)/python/

您可以更花哨一点,并尝试验证版本是否由虚线数字组成:

if ($path =~ m{^ /bin/ .* /python/ ( [0-9]+ (?: \. [0-9]+ )* ) / }x) {
    $version = $1;
}

(这是事情变得混乱到打破x标志以允许正则表达式中的空白的地方。)


推荐阅读