Почему регулярное выражение не работает с глобальной идентификацией в Perl? - PullRequest
3 голосов
/ 11 февраля 2012

Это очень странно, и я понятия не имею, в чем проблема!

У меня очень большая строка (длина = 648745), и я не знаю, может ли ее длина вызвать эту проблему, но я пытаюсь найти некоторые параметры внутри нее и перенести их в массивПримерно так:

push(@items_ids, [$2, $3]) while ($all_items_list =~ /itemID&(id|num)=([\d]*)\">\#([\d]*)/g);

Не работает, в конце возвращает пустой массив.Я подумал, что мой RegEx не прав, но когда я запускаю этот код:

while ($all_items_list =~ /itemID&(id|num)=([\d]*)\">\#([\d]*)/){
    print "\nItemID=$2 Identity=$3\n";die;
}

, он находит первое вхождение, когда я ставлю «g» в конце ReEx, он не может его найти.подробнее ...

Я знаю, что здесь что-то не хватает, Пожалуйста, помогите мне, это не сложная часть моего сценария, и я застрял, :( ...

Спасибозаранее за вашу помощь.

1 Ответ

4 голосов
/ 11 февраля 2012

В скалярном контексте m/.../g начинает искать, где предыдущий успешный m/.../g остановился. Я бы предложил сбросить позицию поиска прямо перед циклом:

pos($all_items_list) = undef;
push(@items_ids, [$2, $3]) while ($all_items_list =~ /itemID&(id|num)=([\d]*)\">\#([\d]*)/g);

и посмотрим, поможет ли это. (См. http://perldoc.perl.org/functions/pos.html.)

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