Как регулярное выражение нескольких URL из одной и той же переменной в Perl - PullRequest
1 голос
/ 04 августа 2011

Я пытаюсь найти поле в базе данных для извлечения 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";

Спасибо!

1 Ответ

3 голосов
/ 04 августа 2011

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

m/http:(\S+)/g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...