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]   

> Описание: Класс [[:print:]] не содержит русских символов
sozon
Отправлено: 18 Апреля, 2007 - 14:06:15
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Апр. 2007  


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




У меня такая проблема.
Нужно отпарсить страницу. Для этого понадобился класс [[:print:]] - все печатные символы. Но он не содержит кириллицу. А русские символы также необходимы в регулярном выражении.
Можно ли как то дополнить этот класс?

Т.е. например можно написать [0-9а-я] - цифровые символы дополняем русскими. А как поступить с классом [[:print:]] ? Можно ли дополнить его русскими символами. Или придется перечислять все заново (все цифры, буквы, знаки препинания, другие символы..) Может есть какой нибудь способ?

Поподробнее опишу задачу:
Есть страница, на которой есть название и описание товара. К примеру название обрамляется <p><a href=..........>Название</a></div>
и описание также обрамляется определенными тэгами.

Таким образом описав в регулярном выражении конструкуции
<p><a href=..........>
и </a></p> Мне нужно вытащить то, что между ними.
ereg('[0-9]+">([[:print:]]+)</a></div>',$page,$arr)

([[:print:]]+) и должно дать название, но проблемы начинаются, когда в названии встречаются русские символы.
 
 Top
-SCHATTEN-
Отправлено: 18 Апреля, 2007 - 14:52:44
Post Id



Пользователь


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


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




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

Так что можно дополнить...

Да и ещё когда пишешь Рег. выр. для кирилицы учти , что в диапазон [а-я] невходит буква е
Поэтому оно бдет иметь вид :
"[а-я]е"
 
 Top
evgenijj
Отправлено: 18 Апреля, 2007 - 16:47:00
Post Id



Участник


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


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




PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $text = "
  4. <div align=\"center\"><a href=\"/catalog/index.php?id_prd=17\">Наименование товарной позиции 17</a></div>
  5. <div align=\"center\"><a href=\"/catalog/index.php?id_prd=22\">Наименование товарной позиции 22</a></div>
  6. <div align=\"center\"><a href=\"/catalog/index.php?id_prd=47\">Наименование товарной позиции 47</a></div>
  7. <div align=\"center\"><a href=\"/catalog/index.php?id_prd=56\">Наименование товарной позиции 56</a></div>
  8. ";
  9. $pattern = "/<div[^>]*><a\\s[^>]+>(.*?)<\\/a><\\/div>/i";
  10. preg_match_all( $pattern, $text, $matches );
  11. foreach( $matches[1] as $value ) echo $value."<br/>";
  12. ?>
  13.  

Результат
Наименование товарной позиции 17<br/>
Наименование товарной позиции 22<br/>
Наименование товарной позиции 47<br/>
Наименование товарной позиции 56<br/>
 
 Top
sozon
Отправлено: 18 Апреля, 2007 - 17:10:45
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Апр. 2007  


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




Спасибо. Зарабоало.
Класс дополнялся так: [[: print:]а-яА-ЯёЁ]

Особое спасибо -SCHATTEN-, если бы не подсказали про букву ё, я бы долго думал в один из моментов.
 
 Top
-SCHATTEN-
Отправлено: 18 Апреля, 2007 - 17:33:13
Post Id



Пользователь


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


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




sozon пишет:
Класс дополнялся так: [[: print:]а-яА-ЯёЁ]

Имейте в виду что перед словом print нет пробела, я его поставил чтоб часть кода в смайлик не конвертировалась.
 
 Top
sozon
Отправлено: 20 Апреля, 2007 - 20:41:09
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Апр. 2007  


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




Опять проблема. На страницах сайта, который нужно отпарсить встречаются нестандартные символы, которые не удовлетворяют регулярному выражению [[:print:]а-яА-ЯЁё] например символы с кодами (по функции ord) 9 и 183

Можно ли написть регулярное выражение, которое бы соответствовало всем символам?

Т.е. например взять все, что находится между <td> </td>.
 
 Top
-SCHATTEN-
Отправлено: 20 Апреля, 2007 - 20:52:40
Post Id



Пользователь


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


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




Можно но это проще делать по средствам функцийа не рег.выр.
Ну а просто внести их в рег.выр нельзя ?
 
 Top
sozon
Отправлено: 20 Апреля, 2007 - 21:54:19
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Апр. 2007  


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




-SCHATTEN- пишет:
Ну а просто внести их в рег.выр нельзя ?


Т.е? Не понял вопрос.

Как мне можно записать рег. выражение, чтобы вытащить любые символы?

Чем можно заменить
<tr><td>([[:print:]а-яА-ЯЁё] )</td></tr>, чтобы использовать все символы ?
 
 Top
evgenijj
Отправлено: 20 Апреля, 2007 - 22:11:22
Post Id



Участник


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


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




Ты вообще читаешь, что тебе пишут?
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $pattern = "/<tr[^>]*><td[^>]*>(.*?)<\\/td><\\/tr>/i";
  4. ?>
  5.  
 
 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