Perl Regular Expression по умолчанию для несопоставленных - PullRequest
1 голос
/ 02 июля 2011

Допустим, я делаю это:

my ($a,$b,$let) = $version =~ m/^(\d+)\.(\d+)\.?([A-Za-z])?$/;

, поэтому это будет соответствовать, например: 1.3a, 1.3, ... Я хочу иметь значение по умолчанию для $ let, если let не доступен, позволяетскажем, по умолчанию 0. поэтому для 1.3 я получу: $ a = 1 $ b = 3 $ let = 0

возможно ли это?(из регулярного выражения самостоятельно, без использования дополнительных утверждений)

Спасибо,

Ответы [ 2 ]

2 голосов
/ 03 июля 2011

Это будет работать - обновлено для использования побитового или вместо троичного оператора.

my ($a,$b,$let) = ($version =~ m/^(\d+)\.(\d+)\.?([A-Za-z])?$/) 
            && ($1,$2,$3 || 0 );

Вот тестовый скрипт

&t("1.3");
&t("1.3a");
&t("1.3.a");

sub t {
$version = shift;
my ($a,$b,$let) = ($version =~ m/^(\d+)\.(\d+)\.?([A-Za-z])?$/) 
                && ($1,$2,$3 || 0 );
print "\n result $a.$b.$let";
}

Вывод

result 1.3.0
result 1.3.a
result 1.3.a

оригинальное решение с использованием троичного оператора также работает

my ($a,$b,$let) = ($version =~ m/^(\d+)\.(\d+)\.?([A-Za-z])?$/) 
            && (defined $3 ? ($1,$2,$3) : ($1,$2,0));
0 голосов
/ 02 июля 2011

$let должно иметь значение по умолчанию undef.Вы можете проверить это, если вам нужно.

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