Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не работает выражение, использующее русские буквы
 
 автор: technic611   (09.05.2011 в 11:47)   письмо автору
 
 

<!--card_photo-->
<div class="columns sale-counter">
<p class="c">Дата обновления &ndash; <strong>09.05.2011</strong></p>
<p class="c">Просмотров объявления &ndash; <strong>30</strong></p>
<p class="c">Срок хранения &ndash; до <strong>20.05.2011</strong></p>
 
 
</div>

скрипт
<?
$str 
file_get_contents("http://cars.auto.ru/cars/used/sale/10493805-281b.html");
$pattern "|<p[\s]+class=\"c\">Просмотров объявления[\s]+&ndash;[\s]+<strong>(.*?)</strong>|is"
preg_match($pattern$str$out); 
$vizit=$out[1];
echo 
$vizit;
?>


как я понял бувы русские не воспринимает

  Ответить  
 
 автор: cheops   (09.05.2011 в 12:18)   письмо автору
 
   для: technic611   (09.05.2011 в 11:47)
 

Как правило, нужно настроить локаль, возможно, вас заинтересует тема по ссылке http://softtime.ru/forum/read.php?id_forum=6&id_theme=80637.

  Ответить  
 
 автор: technic611   (09.05.2011 в 12:21)   письмо автору
 
   для: cheops   (09.05.2011 в 12:18)
 

еще раз пожалуйста ссылочку, не прошло.
так у меня на сервере не воспринимает, а раньше все нормально было...

  Ответить  
 
 автор: cheops   (09.05.2011 в 12:28)   письмо автору
 
   для: technic611   (09.05.2011 в 12:21)
 

Извиняюсь, это я сослался на эту же самую тему :)))
http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=6084

  Ответить  
 
 автор: technic611   (09.05.2011 в 13:07)   письмо автору
 
   для: technic611   (09.05.2011 в 12:21)
 

что-то не получается (((

  Ответить  
 
 автор: cheops   (09.05.2011 в 14:02)   письмо автору
 
   для: technic611   (09.05.2011 в 13:07)
 

А регулярные выражения без русских букв работают?

  Ответить  
 
 автор: technic611   (09.05.2011 в 14:41)   письмо автору
 
   для: cheops   (09.05.2011 в 14:02)
 

да

  Ответить  
 
 автор: cheops   (09.05.2011 в 15:44)   письмо автору
 
   для: technic611   (09.05.2011 в 14:41)
 

Лучше всего обратиться, конечно, в службу тех.поддержки хостера, так как настройка локали может отличаться на разных серверах. Возможно, у вашего хостера есть еще какие-то особенности.

  Ответить  
 
 автор: technic611   (10.05.2011 в 11:59)   письмо автору
 
   для: cheops   (09.05.2011 в 15:44)
 

там говорят что все работает, ничего не понимаю...

  Ответить  
 
 автор: cheops   (10.05.2011 в 13:00)   письмо автору
 
   для: technic611   (10.05.2011 в 11:59)
 

Попробуйте составить сверхпростое регулярное выражение, которое будет искать одну русскую букву в строке из неё же состоящей, ну или из пары букв. Это позволит убедиться в существовании проблемы и убедить службу тех.поддержки.

  Ответить  
 
 автор: technic611   (10.05.2011 в 15:14)   письмо автору
 
   для: cheops   (10.05.2011 в 13:00)
 

пример можно?

  Ответить  
 
 автор: cheops   (10.05.2011 в 15:43)   письмо автору
 
   для: technic611   (10.05.2011 в 15:14)
 

Можно начать отталкиваться от следующего скрипта
<?php
  $pattern 
"|[а-я]|";
  
$text "Не работает";
  if(
preg_match($pattern$text)) echo "Сработало";
  else echo 
"Не сработало";
?>

  Ответить  
 
 автор: technic611   (10.05.2011 в 16:32)   письмо автору
 
   для: cheops   (10.05.2011 в 15:43)
 

все сработало, странно, почему же мой скрипт не работает

  Ответить  
 
 автор: cheops   (10.05.2011 в 17:17)   письмо автору
 
   для: technic611   (10.05.2011 в 16:32)
 

Вот этот скрипт у вас срабатывает?
<?php
  $str 
'<div class="columns sale-counter"> 
<p class="c">Дата обновления &ndash; <strong>09.05.2011</strong></p> 
<p class="c">Просмотров объявления &ndash; <strong>30</strong></p> 
<p class="c">Срок хранения &ndash; до <strong>20.05.2011</strong></p>
</div>'
;
  
$pattern "|<p[\s]+class=\"c\">Просмотров[\s]+объявления[\s]+&ndash;[\s]+<strong>(.*?)</strong>|is";  
  
preg_match($pattern$str$out);  
  
$vizit=$out[1]; 
  echo 
$vizit
?>

  Ответить  
 
 автор: technic611   (10.05.2011 в 18:21)   письмо автору
 
   для: cheops   (10.05.2011 в 17:17)
 

этот да, а если подгружаю страницу-то нет.
может дело в этом
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
???

  Ответить  
 
 автор: cheops   (10.05.2011 в 18:59)   письмо автору
 
   для: technic611   (10.05.2011 в 18:21)
 

Если вы используете UTF-8, нужно добавить модификатор u

  Ответить  
 
 автор: technic611   (10.05.2011 в 19:08)   письмо автору
 
   для: cheops   (10.05.2011 в 18:59)
 

нет, вы не поняли это я страницу подгружаю в хеадере у нее стоит такая кодировка, может дело в этом?

  Ответить  
 
 автор: cheops   (10.05.2011 в 19:54)   письмо автору
 
   для: technic611   (10.05.2011 в 19:08)
 

Тогда действительно не очень понятно.
1) Сам скрипт в какой кодировке?
2) В какой кодировке данные, которые он обрабатывает?

  Ответить  
 
 автор: technic611   (10.05.2011 в 23:05)   письмо автору
 
   для: cheops   (10.05.2011 в 19:54)
 

данные которые обрабатывает в этой кодировке
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

а скрпит как узнать в какой?

  Ответить  
 
 автор: technic611   (12.05.2011 в 23:50)   письмо автору
 
   для: technic611   (10.05.2011 в 23:05)
 

как же быть, есть еще какие нибудь предложения?

  Ответить  
 
 автор: cheops   (13.05.2011 в 11:54)   письмо автору
 
   для: technic611   (10.05.2011 в 23:05)
 

Скрипт на этой же странице расположен?

  Ответить  
 
 автор: technic611   (13.05.2011 в 23:45)   письмо автору
 
   для: cheops   (13.05.2011 в 11:54)
 

скрипт запускается кроном чрез определенное время

  Ответить  
 
 автор: cheops   (14.05.2011 в 10:29)   письмо автору
 
   для: technic611   (13.05.2011 в 23:45)
 

А этот скрипт в какой кодировке написан? При помощи какой программы он создавался?

  Ответить  
 
 автор: technic611   (14.05.2011 в 19:46)   письмо автору
 
   для: cheops   (14.05.2011 в 10:29)
 

в обычном блокноте akelpad.exe

  Ответить  
 
 автор: cheops   (14.05.2011 в 20:04)   письмо автору
 
   для: technic611   (14.05.2011 в 19:46)
 

Стандартный блокнок позволяет сохранять кодировку в UNICODE и Windows-кодировках, хорошо бы выяснить в какой кодировке ложаться данные в скрипт.

  Ответить  
 
 автор: technic611   (14.05.2011 в 22:18)   письмо автору
 
   для: cheops   (14.05.2011 в 20:04)
 

в Windows 1251

  Ответить  
 
 автор: technic611   (15.05.2011 в 14:32)   письмо автору
 
   для: cheops   (14.05.2011 в 20:04)
 

<!--card_photo-->
<div class="columns sale-counter">
<p class="c">Дата обновления &ndash; <strong>15.05.2011</strong></p>
<p class="c">Просмотров объявления &ndash; <strong>61</strong></p>


тогда как можно обойти буквы. нужно вытащить 61

  Ответить  
 
 автор: cheops   (15.05.2011 в 14:58)   письмо автору
 
   для: technic611   (15.05.2011 в 14:32)
 

Можно начать отталкиваться от следующего скрипта
<?php
  $text 
'<!--card_photo--> 
<div class="columns sale-counter"> 
<p class="c">Дата обновления &ndash; <strong>15.05.2011</strong></p> 
<p class="c">Просмотров объявления &ndash; <strong>61</strong></p>'
;
  
$pattern "|<p\s+class=\"c\">[^<]+<strong>(\d+?)</strong></p>|i";
  
preg_match($pattern$text$out);
  echo 
$out[1];
?>

  Ответить  
 
 автор: technic611   (15.05.2011 в 18:53)   письмо автору
 
   для: cheops   (15.05.2011 в 14:58)
 

а если так?


<!--card_photo-->
<div class="columns sale-counter">
<p class="c">Дата обновления &ndash; <strong>14.05.2011</strong></p>
<p class="c">Просмотров объявления &ndash; <strong>124</strong></p>
<p class="c">Срок хранения &ndash; до <strong>13.06.2011</strong></p>
 


вытаскиваем 124

  Ответить  
 
 автор: cheops   (15.05.2011 в 19:03)   письмо автору
 
   для: technic611   (15.05.2011 в 18:53)
 

Точно такое же регулярное выражение - цифра не имеет значение, оно любое найдет.

  Ответить  
 
 автор: technic611   (15.05.2011 в 20:21)   письмо автору
 
   для: cheops   (15.05.2011 в 19:03)
 

так там три одинаковых записи, получается что оно найдет послюднюю из них-это дата, а мне нужно кол-во просмотров

  Ответить  
 
 автор: cheops   (15.05.2011 в 20:40)   письмо автору
 
   для: technic611   (15.05.2011 в 20:21)
 

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

  Ответить  
 
 автор: technic611   (16.05.2011 в 10:42)   письмо автору
 
   для: cheops   (15.05.2011 в 20:40)
 

кажется начинаю понимать, это потому что стоит d- целые числа?

  Ответить  
 
 автор: technic611   (16.05.2011 в 12:39)   письмо автору
 
   для: cheops   (15.05.2011 в 20:40)
 

спасибо, все получилось. но вопрос почему русские буквы не воспринимаются так и остался

  Ответить  
 
 автор: Deed   (14.05.2011 в 08:18)   письмо автору
 
   для: technic611   (09.05.2011 в 11:47)
 


<?php
preg_match
("/объявления \&ndash; <strong>(\d+)<\/strong>/Us",$str,$out);
echo 
$out[1];
?>

  Ответить  
 
 автор: technic611   (14.05.2011 в 20:06)   письмо автору
 
   для: Deed   (14.05.2011 в 08:18)
 

тоже не получается (((((((

  Ответить  
 
 автор: Deed   (15.05.2011 в 03:19)   письмо автору
 
   для: technic611   (14.05.2011 в 20:06)
 

Прикрепите скрипт.

  Ответить  
 
 автор: technic611   (15.05.2011 в 14:30)   письмо автору
2.5 Кб
 
   для: Deed   (15.05.2011 в 03:19)
 

вот

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования