Я должен начать с повторения, что невероятно неразумно разбирать HTML или XML с регулярными выражениями. Пожалуйста, рассмотрите возможность использования правильного HTML парсера.
Сказав это, ваша проблема здесь довольно легко исправить. То, что вы называете «стандартным интуитивным подходом», прекрасно работает с простой настройкой.
Вот что у вас есть:
if ($string1=~ /\'>(.*?)/) {print "got $1";}
И ваше регулярное выражение \'>(.*?)
. Это означает «найти буквальную кавычку, за которой следует знак« больше, чем », а затем зафиксировать минимальное количество всего, что следует за этим» Проблема в «минимальной сумме». Самая простая вещь, которую .*?
может захватить, это ничто - пустая строка.
Регулярные выражения по умолчанию жадные; они соответствуют как можно больше. Вы добавляете ?
, чтобы убрать эту жадность и заставить их совпадать как можно меньше. Но ты не хочешь этого здесь. Здесь вы хотите их жадность. Так что просто удалите это ?
.
use warnings;
use strict;
my @strings = (
"<a href='/channels/folder1'>Alpha-Seeking",
"<a href='/channels/folder2'>No Underlying Index ,"
);
for my $string (@strings) {
if ($string =~ /'>(.*)/) { # Note: No "?" here
print "got $1\n";
}
}
Это отобразит:
got Alpha-Seeking
got No Underlying Index ,