Перегрузка в регулярных выражениях в Perl - PullRequest
1 голос
/ 08 июля 2011

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

$myalbum =~ s/[-_'&’]/ /g;
$myalbum =~ s/[,’.]//g;
$myalbum =~ m/([A-Z0-9\$]+) +([A-Z0-9\$]+) +([A-Z0-9\$]+) +([A-Z0-9\$]+) +([A-Z0-9\$]+)/i;

, чтобы сопоставить следующие строки

"30_Seconds_To_Mars_-_30_Seconds_To_Mars"

"30_Seconds_To_Mars_-_A_Beautiful_Lie"

"311_-_311"

"311_-_From_Chaos"

"311_-_Grassroots"

"311_-_Sound_System"

Я испытываю то, что для строк с менее чем 5 совпадающими группами311 _-_ 311), пытаясь print $1 $2 $3 вообще ничего не печатать.Будут напечатаны только строки с более чем 5 совпадениями.

Как мне решить эту проблему?

Ответы [ 3 ]

3 голосов
/ 08 июля 2011

Похоже, вы просто хотите слова в отдельных группах. Мне кажется, что вы злоупотребляете регулярными выражениями, чтобы сделать это, когда вы можете просто выполнить свои замены, а затем разделить. Просто сделай:

$myalbum =~ s/[-_'&’]/ /g;
$myalbum =~ s/[,’.]//g;
my @myalbum_list = split(/\s/, $myalbum);
#Print out whatever it is you want/ test length, etc...
print "$myalbum_list[0] $myalbum_list[1] $myalbum_list[2]";
1 голос
/ 08 июля 2011

символ + означает хотя бы одно совпадение.Это означает, что ваше регулярное выражение m/([A-Z0-9\$]+) +([A-Z0-9\$]+) + ... требует, чтобы все эти поля были там, чтобы его считали совпадением.Причина, по которой вы ничего не захватываете, состоит в том, что это на самом деле не соответствует.

Вы, вероятно, ищете символ *, который означает ноль или более, а не один или несколько, например +.

0 голосов
/ 08 июля 2011

Полагаю, ваши группы захвата пусты для "311 - 311", потому что эта строка не соответствует вашему регулярному выражению.

Как решить? Используйте * вместо +, чтобы разрешить пустые последовательности.

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

Почему бы не сравнить с '(.*) - (.*)', будучи первой группой альбома, а второй - заголовком. Проблема заключается в таких строках, как «Альбом со знаком минус - Первый трек» или «Мой альбом - трек один - два - три». Но как человек, вы не знаете, где заканчивается альбом и начинается трек.

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