Как удалить последний символ из строковой переменной? - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь получить все категории Google Play в отдельные ссылки, например https://play.google.com/store/apps/category/ART_AND_DESIGN

Это код, который я придумал

use LWP::Simple;

$url     = 'https://play.google.com';
my $html = get($url);

while ( $html =~ /href\=\"(\/store\/apps\/category\/)([A-Z]+"|[A-Z]+_[A-Z]+"|[A-Z]+_[A-Z]+_[A-Z]+")/g ) {

    print "$url$1$2\n";
}

Проблема в том, что $2 также дает мне кавычку в конце, например https://play.google.com/store/apps/category/ART_AND_DESIGN"

Как мне избавиться от двойной кавычки " при печати?

1 Ответ

0 голосов
/ 12 мая 2018

Хорошо, вам действительно нужно обрабатывать HTML с помощью соответствующего модуля, но я объясню проблемы

Во-первых, вместо экранирования всех этих слешей вы можете использовать другой разделитель для шаблона./.../ - это то же самое, что и m/.../, но если вы используете m (для «соответствия»), тогда вы можете выбрать другой разделитель.Здесь я использовал восклицательные знаки !

Во-вторых, нет смысла добавлять закрывающую двойную кавычку во второй захват или указывать все альтернативы: ноль, один или два подчеркивания.Метасимвол \w соответствует символам «слово» и является таким же, как [0-9A-Za-z_], то есть буквенно-цифровыми или подчеркиванием.Вам просто нужно сопоставить как можно больше из них

Этот тест должен работать

$html =~  m!href="(/store/apps/category/)(\w+)!g

И чтобы ответить на ваш исходный вопрос, функция chop удаляет последний символ строки.Он не будет работать на $2, потому что это значение доступно только для чтения, поэтому вам нужно было бы объявить собственную переменную и сначала скопировать ее

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