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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: как убрать лишние слова ...
Delovoy
Отправлено: 26 Января, 2011 - 19:36:48
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Нояб. 2010  


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




Парсю следующий текст следующим методом:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         $text = '<p style="margin-bottom:6px; margin-top:2px; text-indent:0px;margin-left:10px">
  3.                <a href="/streets/588.htm" title="" style="text-indent:0px;margin:0px;pading:0px; font-size:12px; ">
  4.                1.
  5.                Александровская
  6.                </a>
  7.                <!-- ( Пригород
  8.                , )
  9.                -->
  10.                <br>
  11.                <p style="margin-bottom:6px; margin-top:2px; text-indent:0px;margin-left:10px">
  12.                <a href="/streets/577.htm" title="" style="text-indent:0px;margin:0px;pading:0px; font-size:12px; ">
  13.                2.
  14.                Андрющенко
  15.                </a>
  16.                <!-- ( Пригород
  17.                , )
  18.                -->
  19.                <br>
  20.                <p style="margin-bottom:6px; margin-top:2px; text-indent:0px;margin-left:10px">
  21.                <a href="/streets/723.htm" title="" style="text-indent:0px;margin:0px;pading:0px; font-size:12px; ">
  22.                3.
  23.                Б.Житомирская
  24.                </a>
  25.                <!-- ( Пригород
  26.                , )
  27.                -->
  28.                <br>';
  29.  
  30.  
  31.         preg_match_all("/[а-яА-Я.]{2,}/u", $text, $out_arr);
  32.         print_r($out_arr);
  33.         ?>


Результат почти получился верным
CODE (html):
скопировать код в буфер обмена
  1. Array ( [0] => Array ( [0] => Александровская [1] => Пригород [2] => Андрющенко [3] => Пригород [4] => Б.Житомирская [5] => Пригород ) )


Как из результатов убрать повторяющийся элемент "Пригород" ?

(Отредактировано автором: 26 Января, 2011 - 19:38:15)

 
 Top
movEAX
Отправлено: 26 Января, 2011 - 20:10:11
Post Id



Частый посетитель


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


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




array_unique


-----
армия.. самое убогое место
 
 Top
dima4321
Отправлено: 26 Января, 2011 - 20:17:26
Post Id


Новичок


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


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




Он ни это имел ввиду

а вот это

CODE (htmlphp):
скопировать код в буфер обмена
  1. preg_match_all('/^\s+[а-я.]+/mi',$m,$match);
  2.                            
  3.                            print_r($match);
 
 Top
Delovoy
Отправлено: 27 Января, 2011 - 10:10:17
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Нояб. 2010  


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




Спасибо movEAX, это немного не то, но думаю еще пригодится !

Спасибо, dima4321!
Работает ! Улыбка

Я правильно понял:
модификатор m - устанавливает обработку текста как многострочного
модификатор i - убирает регистрозависимость

^\s - выражение должно начинаться с пробела или символа перевода строки
^\s+ - выражение должно начинаться с пробела или символа перевода строки и символ должен быть один или более ?
[а-я.] класс символов, которые может содержать выражение
[а-я.]+класс символов, которые может содержать выражение и символ должен быть один или более ?
 
 Top
Uchkuma
Отправлено: 27 Января, 2011 - 10:25:40
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




Delovoy пишет:
Я правильно понял:
Правильно.
С модификатором m каждая строка будет рассматриваться в отдельности, поэтому вхождение Пригород не попадает в результаты поиска, т.к. находится не в начале строки с учетом начальных пробельных символов, что не соответствует шаблону.
(Добавление)
Кстати, в зависимости от содержимого, данный шаблон не даст 100% верный результат. С точки зрения логики, вам необходимо выбирать вхождения, начинающиеся после цифры с точкой до первой открывающейся угловой скобки.
 
 Top
JustUserR
Отправлено: 27 Января, 2011 - 10:37:52
Post Id



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


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


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




Delovoy В качестве возможного варианта решения предполагаемой задачи допустимо исопльзование средств XML-анализатора позволяющег обеспечить извлечение отдельныъ элементов и их параметров из оригинального документа - на основе предоставления явного вложенного пути к целевому элементу или критерия его поиска в XML-документе
Использование средств XML-анализатора для решения предполагаемой задачи в действительности является в значительной мере более эффективным решением обеспечиваемого за счет проведения разбора XML-документа в компиированном коде соответствующих модулей
Более подробная информация по данному вопросу предоставлена здесь http://www.php.su/functions/?page=cat_xml


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Delovoy
Отправлено: 27 Января, 2011 - 10:56:49
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Нояб. 2010  


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




Uchkuma пишет:
Кстати, в зависимости от содержимого, данный шаблон не даст 100% верный результат. С точки зрения логики, вам необходимо выбирать вхождения, начинающиеся после цифры с точкой до первой открывающейся угловой скобки.

Да, все верно! Сейчас как раз "сражаюсь" с конструкцией такого регулярного выражения

JustUserR пишет:
Более подробная информация по данному вопросу предоставлена здесь http://www.php.su/functions/?page=cat_xml

Это тоже верно очень много полезной информации ..ОЧЕНЬ МНОГО Улыбка
Дайте конкретный совет чем пользоваться, а еще лучше конкретный пример реализации описанной мной задачи.
Лучше всего я обучаюсь на примерах, если Ваша цель на этот форуме, рально помочь. Спасибо Улыбка
 
 Top
JustUserR
Отправлено: 27 Января, 2011 - 11:07:28
Post Id



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


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


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




Delovoy пишет:
Дайте конкретный совет чем пользоваться, а еще лучше конкретный пример реализации описанной мной задачи.
Лучше всего я обучаюсь на примерах, если Ваша цель на этот форуме, рально помочь. Спасибо
Пожалуйста! Предоставленный источник информации в действительности включает сведениях о всех распространных средствах позволяющих осуществять анализ XML-документов в PHP-приложениях - однако оптимальным вариантом для решения данной задачи может являться модуль simplexml конкретная информация о котороом предоставлена здесь http://www.php.su/functions/?cat=simplexml - обеспечивающей трактования идентификаторов загружаемого XML-документ на уровне программных элементов что реализуется средствами управление хранимыми элементами программного потока
Практические примеры предоставлены здесь http://www[dot]amway-shop[dot]ru/article[dot][dot][dot]/article249[dot]html и здесь http://www[dot]ibm[dot]com/developerwork[dot][dot][dot]9&S_CMP=GR01


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Uchkuma
Отправлено: 27 Января, 2011 - 11:10:45
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




Delovoy пишет:
Сейчас как раз "сражаюсь" с конструкцией такого регулярного выражения
Такая конструкция должна подойти:
CODE (regexp):
скопировать код в буфер обмена
  1. /\d\.\s+([а-я\s.]+)/i

Если названия всегда являются ссылками, то можно использовать такую конструкцию:
CODE (regexp):
скопировать код в буфер обмена
  1. /<a [^>]+>\s*\d+\.\s*([а-я\s.]+)\s*</a>/i
 
 Top
JustUserR
Отправлено: 27 Января, 2011 - 11:20:52
Post Id



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


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


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




Uchkuma пишет:
Такая конструкция должна подойти
Для осуществленя корректного функционирования регулярных выражений включающих региональные элементы в шаблонах - необходимо обеспечение сопоставления кодовой таблицы представления информаицинных полей в потоке исполнения PHP-приложения и данных получаемог XML-документа


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Delovoy
Отправлено: 27 Января, 2011 - 12:04:05
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Нояб. 2010  


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




Я изменил конструкцию следующим образом

PHP:
скопировать код в буфер обмена
  1. preg_match_all("/\s+[0-9.]+\s+([а-я.].+[а-я.]+)/iu", $text, $out_arr);


в результате получил, то что хотел
(даже попали в отбор такие звери, как:
Владимиро-Лыбедская и Житомирская Ивановская пл.) Улыбка

CODE (html):
скопировать код в буфер обмена
  1. Array ( [0] => 1. Александровская [1] => 2. Андрющенко [2] => 3. Б.Житомирская Ивановская )


остался вопрос как в начале отрезать цифру с номером и пробелом, но при этом чтобы она осталась как условие поиска ?

и при значении метро "Дворец Украина" в результат попадает
метро "Дворец Украина - т.е. отсутствует последняя ковычка, но присутствует первая ...


А при записи в БД получается вообще что-то интересное
метро &quot;Дворец Украина
(модераторы, сорри что не по теме про базы данных, но чтобы в одном обсуждении уже все вопросы решить)

(Отредактировано автором: 27 Января, 2011 - 18:13:41)

 
 Top
dima4321
Отправлено: 27 Января, 2011 - 19:13:33
Post Id


Новичок


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


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




отрезать цифру с точкой можно по разному. Например воспользоваться строковыми функциями при переборе массива
как вариант
http://php.su/functions/?substr

т.е.
CODE (htmlphp):
скопировать код в буфер обмена
  1. foreach($match as $value)// или $match[0]
  2.  
  3. {
  4.  echo substr($value, 4);
  5. }


а можно и preg_replace пройти вариантов масса.))

если эта регулярка работает

preg_match_all("/\s+[0-9.]+\s+([а-я.].+[а-я.]+)/iu", $text, $out_arr);

то так:

preg_match_all("/\s+(?:[0-9.]+)\s+([а-я.].+[а-я.]+)/iu", $text, $out_arr);

(?: )конструкция не попадает в результирующий массив. Т.е. скобки не запоминаются при выводе массива

(Отредактировано автором: 27 Января, 2011 - 19:14:47)

 
 Top
Uchkuma
Отправлено: 27 Января, 2011 - 20:36:31
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




Delovoy пишет:
остался вопрос как в начале отрезать цифру с номером и пробелом, но при этом чтобы она осталась как условие поиска
Прочитать описание функции. Подмаску надо использовать. Т.е. круглые скобки. Смотрите мой пример.
 
 Top
JustUserR
Отправлено: 29 Января, 2011 - 23:35:26
Post Id



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


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


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




Delovoy пишет:
А при записи в БД получается вообще что-то интересное
метро &quot;Дворец Украина
Формирование целевого информационного поля запись которого осуществляется в таблицы базу данных предполагает обеспечения конвертации уровня элементноо трактования сохраняемых данных относительно контейнерной константы в оригинальной запросе и разделительных элементов в объекте хранения - в частности получение указанной формы записи свидетельствует об осуществлении просмотра содержимого БД вне приложений отображения HTML-элементов - или при сохранении было произведено повтрная операция мнемонирования управляющих HTML-элементов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Delovoy
Отправлено: 31 Января, 2011 - 10:02:33
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Нояб. 2010  


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




Спасибо всем за помощь! Все получилось! )))

Отдельное спасибо
JustUserR пишет:
за анализ XML-документов в PHP-приложениях
Подмигивание
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB