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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите с регуляром

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Что-то не получается
Djin_dj
Отправлено: 04 Июня, 2010 - 11:25:13
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Июнь 2008  
Откуда: Россия


Помог: 0 раз(а)




Есть такой вот код

PHP:
скопировать код в буфер обмена
  1. $h_name    = "Robin_van_Persie.jpg";
  2. $findfile  = 'http://simple.wikipedia.org/wiki/File:'.$h_name;
  3. $needhref  = '(^[http://upload.wikimedia.org/wikipedia/commons/thumb/]+[A-Za-z|0-9|A-Za-z0-9]+[/]+[A-Za-z|0-9|A-Za-z0-9]+[/]+['.$h_name.']+[/]+[0-9]+[px-]+['.$h_name.']$)';
  4. $checkstring = htmlspecialchars(file_get_contents($findfile));
  5. preg_match_all($needhref,$checkstring,$pathfile);
  6. print_r($pathfile);
  7.  

Выдает

А на самом деле там есть
Цитата:
<img alt="File:Robin van Persie.jpg" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Robin_van_Persie.jpg/376px-Robin_van_Persie.jpg" width="376" height="599" />

не понимаю что не так!
 
 Top
JustUserR
Отправлено: 04 Июня, 2010 - 13:01:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Djin_dj пишет:
Не понимаю что не так!
Может быть входящие данные находятся в другой кодировке - и даже если у вас используются только латинские символы то в однобайтовых и многобайтовых кодировках они конечно же будут не совпадать Попробуйте изменить кодировку поисковых строковых костнант и локаль PHP-скрипта или перекодировать входящий данные


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Djin_dj
Отправлено: 04 Июня, 2010 - 21:25:58
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Июнь 2008  
Откуда: Россия


Помог: 0 раз(а)




Если кому-то и когда-то понадобится вот работа с изображением людей на википедии
PHP:
скопировать код в буфер обмена
  1.  
  2. $name = 'Robin van Persie';
  3. $h_name = str_replace(' ','_',$name).'.jpg';
  4. $findfile  = 'http://simple.wikipedia.org/wiki/File:'.$h_name;
  5. $needhref  = '|[http://upload.wikimedia.org/wikipedia/commons/thumb/]+[A-Za-z0-9]+[/]+[A-Za-z0-9]+[/]+['.$h_name.']+[/]+[0-9]+[px]|';
  6. if(!$fileF = @file($findfile))
  7. {
  8. $pathfile   = '/image/nofoto.gif';
  9. }
  10. else
  11. {
  12. $ch=curl_init("$findfile");
  13. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  14. $html = curl_exec ( $ch );
  15. $checkstring = htmlspecialchars($html);
  16. preg_match_all($needhref,$checkstring,$pathfile);
  17. $pathfile = substr($pathfile[0][0],0,strlen($pathfile[0][0])-4)."200px-".$h_name;
  18. }

Короче в переменную name вы можете сунуть чье-нить имя и вполне вероятно о Вас знает википедия
В пасфайле в самом конце скрипта там где вы можете настроить размер картинки самостоятельно указав нужный размер.
Спасибо за хэлп
 
 Top
JustUserR
Отправлено: 05 Июня, 2010 - 12:33:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Djin_dj пишет:
Короче в переменную name вы можете сунуть чье-нить имя и вполне вероятно о Вас знает википедия
В пасфайле в самом конце скрипта там где
Все верно только необходимо учитывать то что получаемые web-пути не должны содержать html-сущности а должны быть закодированы в urlencode - поэтому когда вы получаете страницу из CURL то можно сразу обработать ее регулярным выражением и при посылке самого запроса за картинкой произвести шифровку пути Конечно википедия отличается тем что сама преобразовывает некоторые основые символы в web-путях - но могут встретиться и те которые нужно преобразовать заранее


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Djin_dj
Отправлено: 09 Июня, 2010 - 18:13:00
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Июнь 2008  
Откуда: Россия


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. $checkstring1 = "</b>6 October 1972</li><li><b>Height:
  3.                            </b>196 cm</li><li><b>Shirt number:
  4.                            </b>1</li><li><b>Position:
  5.                            </b>Goalkeeper</li><li><b>Current club:
  6.                            </b>Fulham
  7.                            (ENG)
  8.                        </li><li><b>International Caps:
  9.                        </b>75</li><li><b>International Goals:
  10.                        </b>0</li><li><b>First international:";
  11. preg_match_all('|</li><li><b>Current club:(.*?)</li><li><b>International Caps:|',$checkstring1,$wwwww,PREG_PATTERN_ORDER);
  12. print_r($wwwww);
  13.  

выдает
CODE (htmlphp):
скопировать код в буфер обмена
  1. Array ( [0] => Array ( ) [1] => Array ( ) ) Array ( [0] => Array ( ) [1] => Array ( ) ) Array ( [0] => Array ( ) [1] => Array ( ) )  


Не могу понять где ошибка

Буду рад помощи.

(Отредактировано автором: 09 Июня, 2010 - 18:21:20)

 
 Top
Мелкий Супермодератор
Отправлено: 09 Июня, 2010 - 18:33:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Я не большой спец по регуляркам - но кажется ваша проблема в том, что вы не указали спецификатор m - многострочный поиск и s - считать перевод строки так же за "любой символ" (точка, который)


-----
PostgreSQL DBA
 
 Top
Djin_dj
Отправлено: 09 Июня, 2010 - 19:37:43
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Июнь 2008  
Откуда: Россия


Помог: 0 раз(а)




Мелкий пишет:
Я не большой спец по регуляркам - но кажется ваша проблема в том, что вы не указали спецификатор m - многострочный поиск и s - считать перевод строки так же за "любой символ" (точка, который)

без изменения
 
 Top
Champion Супермодератор
Отправлено: 09 Июня, 2010 - 20:08:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




да, |ms надо указать. И надо отладкой заняться: возьми оставь от легулярки только маленький кусок, который сматчится по-любому. И прицепляй к нему по чуть-чуть, и увидишь, где косяк.
 
 Top
JustUserR
Отправлено: 10 Июня, 2010 - 11:14:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Мелкий пишет:
Не указали спецификатор m - многострочный поиск
Многострочный поиск используется в похожем но несколько ином случае - а именно когда регулярное выражение обрабатывает независимо несколько строк и каждая из строк привязывается с помощью спецсимволов ^ и $ (Причем \A и \Z именно в многострочном поиске служат для указания реальных границ) - а само наличие \n в шаблоне будет вести к простому соответствию этому символу и неважно как он записан в строке - в подстановочном значении \n или собственной персоной как часть исходного файла - другое дело если файл сохранялся в windows то там будет \r\n и соответсвтие \r может и не достигаться


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB