Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Необходимо спарсить все URL-подобные подстроки, которые содержат нужный/е домены.
Форумы портала PHP.SU » PHP » Регулярные выражения » Необходимо спарсить все URL-подобные подстроки, которые содержат нужный/е домены.

Страниц (1): [1]
 

1. Zend - 28 Мая, 2012 - 13:07:49 - перейти к сообщению
Есть список доменов, в массиве
PHP:
скопировать код в буфер обмена
  1.  
  2. $ar = array(
  3.         "letitbit.net",
  4.         "yandex.ru"
  5. );
  6.  

Есть переменная с текстом
PHP:
скопировать код в буфер обмена
  1.  
  2. $string = 'http://yandex.ru http://www.yandex.ru/forum/page/1/ some some text <a href="http://letitbit.net?go=naher&download=porno">I hate you little bich</a> http://www.google.ru';
  3.  

Хочу из этого текста получить массив, который содержал бы:
PHP:
скопировать код в буфер обмена
  1.  
  2. $res = array(
  3. 'http://yandex.ru',
  4. 'http://www.yandex.ru/forum/page/1/',
  5. 'http://letitbit.net?go=naher&download=porno');
  6.  
2. EuGen - 28 Мая, 2012 - 13:35:31 - перейти к сообщению
По-быстрому:
PHP:
скопировать код в буфер обмена
  1. $rgData = array(
  2.    "letitbit.net",
  3.    "yandex.ru");
  4. $sText  = 'http://yandex.ru http://www.yandex.ru/forum/page/1/ some some text <a href="http://letitbit.net?go=where&download=item">Something went wrong</a> http://www.google.ru www.yandex.ru/search?some_data';
  5. $rgResult=array_filter(array_map(function($sItem)
  6.    {
  7.       return preg_match('/^www\..*/ui', $sItem)?'http://'.$sItem:$sItem;
  8.    }, preg_split('/[\s\"\']+/', $sText, -1, PREG_SPLIT_NO_EMPTY)), function($sItem) use ($rgData)
  9. {
  10.    $rgUrl=parse_url($sItem);
  11.    return array_key_exists('scheme', $rgUrl) && $rgUrl['scheme']=='http' && preg_match('/'.join('|', array_map('preg_quote', $rgData)).'/ui', $rgUrl['host']);
  12. });
  13. //var_dump($rgResult);

[upd - убраны фривольности]
?
3. Zend - 28 Мая, 2012 - 13:43:02 - перейти к сообщению
Где-то синтаксическая ошибка, не могу найти где Подозреваемый
Parse error: syntax error, unexpected T_FUNCTION, expecting ')'
4. EuGen - 28 Мая, 2012 - 13:51:17 - перейти к сообщению
Zend
Это не синтаксическая ошибка, а, подозреваю, PHP 5.2. Используйте create_function вместо обычного объявления замыкания.
5. Zend - 28 Мая, 2012 - 17:07:34 - перейти к сообщению
Спасибо, вроде работает как и просил.

 

Powered by ExBB FM 1.0 RC1