2016-11-30 3 views
0

Я запутался с функцией регулярного выражения:Какова функция этого выражения кода?

/\[\]$/

Я попробовал короткий код PERL, чтобы понять это, но я до сих пор путают. Выходной код Else

my $addr2 = {[{'firstname' => 'Nikhil', 'lastname' => 'Hegde'}, {'firstname' => 'Nikhil2', 'lastname' => 'Hegde2'}]}; 
if($addr2 =~ /\[\]$/) { 
    print "If\n"; 
} 
else { 
    print "Else\n"; 
} 

Я думал, что /\[\]$/ бы указать, является ли значение является массивом или нет, но это, кажется, не так. Затем я подумал, что, возможно, значение должно заканчиваться массивом, учитывая, что в регулярном выражении есть $. Итак, я попытался подставляя:

my $addr2 = {[{'firstname' => 'Nikhil', 'lastname' => 'Hegde'}, {'firstname' => 'Nikhil2', 'lastname' => 'Hegde2'}],[]};

, но это не работает. Выход кода остается Else.

Может ли кто-нибудь помочь мне в понимании выражения /\[\]$/? Какое регулярное соответствие оно делает? Благодаря!

+0

Это соответствует буквенному '[]' (пару кронштейнов) в конце строки. Поэтому он соответствует строке '' hello [] "', но не для '' hello "'. Без экранирования скобки являются классом _character_. Кроме того, может потребоваться базовый факт: регулярное выражение работает с строкой, которая может находиться в переменной, но вы пробовали ее в структуре данных _complex. – zdim

+0

вышло ... продолжить - ваш '$ addr2' печатает как' HASH (...) '- и эта строка не имеет' [] 'в конце. – zdim

+0

@zdim Спасибо! Это объясняло много –

ответ

7

Регулярное выражение проверяет соответствие строк. В вашем случае вы попытались сопоставить хеш-ссылку. Вот почему ваш код отправился в блок else.

/\[\]$/. Он соответствует любой строке , которая имеет буквально [] в конце ее. Например, строка my $str = "just an example []" будет соответствовать этому регулярному выражению.

+1

Обратите внимание, что мы можем сопоставить ссылку - 'perl -wE '$ ra = [1,2]; скажем $ ra, если $ ra = ~/AR/''. Это просто, что hashref не имеет '[]' в конце :) – zdim

+0

@zdim gotta say Я никогда не думал об этом варианте! Вы никогда не узнаете, когда что-то настолько странное может пригодиться – yonyon100

+0

Может быть, сборщик данных '$ addr2' мог бы уточнить, что происходит? – Sobrique

Смежные вопросы