Поиск нескольких URL в строке. - PullRequest
3 голосов
/ 30 июля 2011
 $resource = "THIS IS ABOUT WWW.JONAKCOMPUTERS.COM, HTTP://HIGHLOW.COM, AND TESTINGSERVER1.COM"

и я хочу вытащить три URL-адреса в другую строку, похожую на:

 $all_urls = "JONAKCOMPUTERS.COM - HIGHLOW.COM - TESTSERVER1.COM

Я нашел это кем-то другим:

$pattern = '#(www\.|https?:\/\/){1}[a-zA-Z0-9]{2,}\.[a-zA-Z0-9]{2,}(\S*)#i';
preg_match_all($pattern, $string, $matches, PREG_PATTERN_ORDER);

Но этоне тянет "jonakcomputers.com" только "http://url" или" www.url "

Извините за заглавные буквы, я просто хотел прояснить, что в конце он не чувствителен к регистру. Я всегда могуэто нужно сделать до загрузки страницы, так что это может быть javascript или php.

Если бы я мог вытащить один, я думаю, что я мог бы сделать цикл, чтобы продолжать проверять новые, пока не закончится.

Спасибо всем, кто хочет помочь.

Ответы [ 3 ]

2 голосов
/ 30 июля 2011

Я запустил ваш код в консоли, просто изменив имя переменной в последнем фрагменте так, чтобы:

php > $resource = "THIS IS ABOUT WWW.JONAKCOMPUTERS.COM, HTTP://HIGHLOW.COM, AND TESTINGSERVER1.COM"
php > $pattern = '#(www\.|https?:\/\/){1}[a-zA-Z0-9]{2,}\.[a-zA-Z0-9]{2,}(\S*)#i';
php > preg_match_all($pattern, $resource, $matches, PREG_PATTERN_ORDER);
php > var_dump($matches);
array(3) {
    [0]=>
        array(2) {
            [0]=>
                string(23) "WWW.JONAKCOMPUTERS.COM,"
            [1]=>
                string(19) "HTTP://HIGHLOW.COM,"
        }
    [1]=>
        array(2) {
            [0]=>
                string(4) "WWW."
            [1]=>
                string(7) "HTTP://"
        }
    [2]=>
        array(2) {
            [0]=>
                string(1) ","
            [1]=>
                string(1) ","
        }
}

То, что вы видите в возвращении preg_match, - это многомерный массив со следующим:

0: полные совпадения

1: SubPattern 1 соответствует

2: совпадения SubPattern 2

Единственное исправление, которое я вижу, это то, что вам нужно немного настроить RegExp, чтобы учесть отсутствие ww или http. так что просто используйте это для шаблона:

$pattern = '#(www\.|https?:\/\/)?[a-zA-Z0-9]{2,}\.[a-zA-Z0-9]{2,}(\S*)#i';

и ваши $ совпадения теперь должны содержать все 3.

0 голосов
/ 21 сентября 2011

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

Мне нужен был фрагмент кода регулярного выражения, чтобы просмотреть каждый URL в тексте, очистить его и пометить классом css (для jQuery-версии embedly)

Эта функция принимает текст, перебирает каждый найденный URL (используя RegExp, отправленный Kai )

function find_urls($text)
{
    $ret = '';
    // The Regular Expression filter
    $pattern = '#(www\.|https?:\/\/)?[a-zA-Z0-9]{2,}\.[a-zA-Z0-9]{2,}(\S*)#i';

    preg_match_all($pattern, $text, $matches);
    if (sizeof($matches) > 0)
    {
    foreach($matches[0] as $match)
        {
            if(strrpos($match,'http://') === false)
            {
                $url = '<a class="embedly" target="_blank" href="http://'.$match.'">'.$match.'</a> ';

            }
            else
            {
            $url = '<a class="embedly" target="_blank" href="'.$match.'">'.$match.'</a> ';
            }
            $text = str_replace($match,$url,$text);
        }
    }
    return $text;
}
0 голосов
/ 30 июля 2011

Текущее регулярное выражение, которое у вас есть, полностью полагается на начальный www или http для поиска URL.Если вы хотите получить эти неполные URL-адреса, вам сначала нужно определить, что вы ищете.

Например, вы ищете только то, что заканчивается на .com, или вам также нужно получить "jonakcomputers.br"«

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