Объединение регулярных выражений для получения версии пути - PullRequest
0 голосов
/ 02 декабря 2018

Я хотел бы реализовать регулярное выражение Perl, которое проверяет, находится ли путь в правильном формате, и если да, то принимает версию.Это будет легче объяснить на примере.Рассмотрим следующий путь:

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

Я хотел бы проверить, начинается ли этот путь с /bin и содержит ли python.Поэтому я использую ^/bin/.*/python/.Но я хотел бы также получить версию 2.7.5, вставив ее в $1.

. Она должна выглядеть следующим образом:

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

1 Ответ

0 голосов
/ 02 декабря 2018

Если номер версии всегда идет после /python/, вы можете просто сделать:

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

Это будет захватывать сегмент пути (последовательность не-/ символов) после /python/.

Вы можете быть немного более изощренным и попытаться проверить, что версия состоит из пунктирных чисел:

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

(Это - точка, где вещи становятся достаточно грязными, чтобы разбить флаг xчтобы разрешить пробел в регулярном выражении.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...