Я пытаюсь найти поле в базе данных для извлечения URL-адресов. Иногда в поле может быть более 1 URL, и я хотел бы выделить его в отдельные переменные (или массив).
Я знаю, что мое регулярное выражение не будет охватывать все возможности. Пока я отмечаю все, что начинается с http и заканчивается пробелом, я в порядке.
Проблема, с которой я столкнулся, заключается в том, что мои усилия, кажется, либо получают только 1 URL на запись, либо получают только 1 последнее письмо от каждого URL. Я испробовал несколько различных техник, основанных на решениях, которые другие опубликовали, но я не нашел решения, которое работает для меня.
Пример строки ввода:
Тестирование http://marko.co http://tester.net Почти все, что вы хотите.
Цель выхода
$ var [0] = http://marko.co
$ var [1] = http://tester.net
Первая попытка:
если ($ status = ~ m / http: (\ S) + / g) {
напечатайте "$ & \ n";
}
Выход:
http://marko.co
Вторая попытка:
@statusurls = ($ status = ~ m / http: (\ S) + / g);
print "@statusurls \ n";
Выход:
о т
Я новичок в регулярных выражениях, но, поскольку я использую одно и то же регулярное выражение для каждой попытки, я не понимаю, почему он возвращает такие разные результаты.
Спасибо за любую помощь, которую вы можете предложить.
Я просмотрел эти посты и либо не нашел то, что искал, либо не понял, как его реализовать:
Этот показался наиболее многообещающим (и именно здесь я получил вторую попытку, но он не вернул весь URL, только букву: Как я могу хранить перехваты регулярных выражений в массиве в Perl?
В этом есть что-то замечательное. Мне любопытно, если мне нужно смотреть на URL как на слово, так как оно зарезервировано пробелами: Regex Group в Perl: как захватить элементы в массив из группы regex, которая соответствует неизвестному числу вхождений / множественных / переменных из строка
Этот предлагает предложения, аналогичные первым двум. Как сохранить записи из регулярного выражения Perl в отдельных переменных?
Решение:
@statusurls = ($ status = ~ m / (http: \ S +) / g);
печать "@statusurls \ n";
Спасибо!