Попытка получить две подстроки из строки с помощью регулярных выражений в Perl - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь построить регулярное выражение, которое получает следующую строку:

Invalid version of perl: 5.8.7

Формат:

Invalid version of _: _

Мне было интересно, возможно ли получить имя языка иверсия в одна строка , что-то вроде: my ($language,$version) =~ /.../.

Таким образом, вывод будет:

$language = perl
$version = 5.8.7

Может быть, это можно сделать с помощью if-else?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Вы можете извлечь несколько значений из строки, используя «захват».Базовая версия работает следующим образом.Вы захватываете текст в подходящем регулярном выражении, окружая текст (...).В этом примере мы извлечем серии непробельных символов по обе стороны от ":".

use feature 'say'; # for "say()"

$_ = 'Invalid version of perl: 5.8.7';

if (/(\S+): (\S+)/) {
  say "Language = $1";
  say "Version  = $2";
}

Захваченный текст помещается в переменные с именами $1 и $2.Обратите внимание, что мы помещаем все совпадения в оператор if, чтобы убедиться, что наше регулярное выражение совпадает, прежде чем что-либо отображать.

Альтернативный подход, облегчающий понимание вашего кода, заключается в копировании соответствующих данных в именованные переменные, подобные этому:

use feature 'say'; # for "say()"

$_ = 'Invalid version of perl: 5.8.7';

if (my ($language, $version) = /(\S+): (\S+)/) {
  say "Language = $language";
  say "Version  = $version";
}

Как уже отмечали другие, документацию по Perl стоит прочитать, если вы новичок в этом языке.В этом случае вам следует потратить час или два на изучение perlretut .

0 голосов
/ 01 февраля 2019

Это базовое регулярное выражение, поэтому, пожалуйста, прочитайте, например, perlretut или "Освоение регулярных выражений" Джеффри Э. Ф. Фридлом .

TMTOWDTI конечно, но вот один из них:

#!/usr/bin/perl
use strict;
use warnings;

my $input = "Invalid version of perl: 5.8.7";

my($language, $version) = ($input =~ /(\w+):\s+(\d+(?:\.\d+)*)/)
    or die "Can't detect language or version!\n";

print "'${language}' '${version}'\n";

exit 0;

Вывод

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