#regex #perl
#регулярное выражение #perl
Вопрос:
Когда у меня есть строка с несколькими дефисами в ней, я, кажется, могу найти (единственное) желаемое значение, но почему существует несколько выходов? Я бы хотел просто сообщить о совпадающей строке полностью, с дефисами. Я включил то, что, вероятно, является результатом, а также способ перестроить строку, но этот метод кажется ненужной работой.
my $string = "phonenumber123-456-7890";
my @secondStrings = $string =~ m/(d )-(d )-(d )/g;
foreach (@secondStrings){
print $_, "n";
}
if ($string =~ m/(d )-(d )-(d )/g){
print $1."-".$2."-".$3, "n";
}
Комментарии:
1. Почему вы не помещаете все в одну группу захвата?
2. Почему отрицательные голоса по этому вопросу. Проблема может быть очевидной, но для тех, у кого нет опыта использования Perl / регулярных выражений, в частности групп захвата, этого не произойдет. Если это из-за формулировки вопроса, это может непреднамеренно быть прямым результатом этого непонимания.
Ответ №1:
Я полагаю, вы просто хотите поместить весь номер телефона (123-456-7890) в 1 группу захвата, прямо сейчас вы используете 3.
my ($number) = $string =~ m/(d -d -d )/g;
Дальнейшее чтение можно найти здесь: http://perldoc.perl.org/perlre.html#Capture-groups
Комментарии:
1. Я полагаю, вы имели
my ($number) = $string =~ m/(d -d -d )/g;
в виду, что в противном случае $number в скалярном контексте будет присвоено количество захваченных элементов.2. Спасибо за этот ответ. Это решается для всех практических целей, но если есть только одно совпадение, зачем мне вообще нужна группа захвата?