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 :: Версия для печати :: Все печатные символы + Русские символы
Форумы портала PHP.SU » PHP » Регулярные выражения » Все печатные символы + Русские символы

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

1. sozon - 18 Апреля, 2007 - 14:06:15 - перейти к сообщению
У меня такая проблема.
Нужно отпарсить страницу. Для этого понадобился класс [[:print:]] - все печатные символы. Но он не содержит кириллицу. А русские символы также необходимы в регулярном выражении.
Можно ли как то дополнить этот класс?

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

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

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

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

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

Да и ещё когда пишешь Рег. выр. для кирилицы учти , что в диапазон [а-я] невходит буква е
Поэтому оно бдет иметь вид :
"[а-я]е"
3. evgenijj - 18 Апреля, 2007 - 16:47:00 - перейти к сообщению
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/>
4. sozon - 18 Апреля, 2007 - 17:10:45 - перейти к сообщению
Спасибо. Зарабоало.
Класс дополнялся так: [[: print:]а-яА-ЯёЁ]

Особое спасибо -SCHATTEN-, если бы не подсказали про букву ё, я бы долго думал в один из моментов.
5. -SCHATTEN- - 18 Апреля, 2007 - 17:33:13 - перейти к сообщению
sozon пишет:
Класс дополнялся так: [[: print:]а-яА-ЯёЁ]

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

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

Т.е. например взять все, что находится между <td> </td>.
7. -SCHATTEN- - 20 Апреля, 2007 - 20:52:40 - перейти к сообщению
Можно но это проще делать по средствам функцийа не рег.выр.
Ну а просто внести их в рег.выр нельзя ?
8. sozon - 20 Апреля, 2007 - 21:54:19 - перейти к сообщению
-SCHATTEN- пишет:
Ну а просто внести их в рег.выр нельзя ?


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

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

Чем можно заменить
<tr><td>([[:print:]а-яА-ЯЁё] )</td></tr>, чтобы использовать все символы ?
9. evgenijj - 20 Апреля, 2007 - 22:11:22 - перейти к сообщению
Ты вообще читаешь, что тебе пишут?
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $pattern = "/<tr[^>]*><td[^>]*>(.*?)<\\/td><\\/tr>/i";
  4. ?>
  5.  

 

Powered by ExBB FM 1.0 RC1