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]   

> Описание: Использование рег. выражений
TheRealKos
Отправлено: 04 Мая, 2014 - 16:44:54
Post Id



Новичок


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


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




Доброго времени суток. Есть два текста:
1 текст (Отобразить)


2 текст (Отобразить)


Из первого текста нужно взять: И.Д. Гвоздев
Из вторго взять: Чубака А. К.
Текст случайно выдается, и поэтому может быть как 1 так и 2.

Пытался сделать, в итоге
Для первого:
CODE (html):
скопировать код в буфер обмена
  1. (Научный руководитель|Руководитель|НАУЧНЫЙ РУКОВОДИТЕЛЬ|РУКОВОДИТЕЛЬ|Научный Руководитель)([<a-zA-Z0-9->\s\/ ]+)(.)().([а-яА-Яa-zA-Z0-9-()«»,.\s ]+)

Выдает:
CODE (htmlphp):
скопировать код в буфер обмена
  1. систент кафедры АСОИУ                                                                                И.Д. Гвоздев


Для второго:
CODE (html):
скопировать код в буфер обмена
  1. (Научный руководитель|Руководитель|НАУЧНЫЙ РУКОВОДИТЕЛЬ|РУКОВОДИТЕЛЬ|Научный Руководитель)([<a-zA-Z0-9->\s\/ ]+)([а-яА-Яa-zA-Z0-9-()«»,.\s ]+)([<br \/>]+)([а-яА-Я,."\s ]+)

Выдает:


Для второго вроде бы нормально, а для первого беда...И как то нужно еще сделать вместе, т.к. уже говорил, текст случайно выдает, и может быть как 1 так и 2.

(Отредактировано автором: 04 Мая, 2014 - 17:02:30)

 
 Top
Мелкий Супермодератор
Отправлено: 04 Мая, 2014 - 17:26:55
Post Id



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


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


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




Это реальный текст с вот так вот хаотично расставленными br?

CODE (regex):
скопировать код в буфер обмена
  1. ~(?i)(?:Научный)?\s*руководитель(?-i).+?((?:[А-ЯЁ]\.\s*[А-ЯЁ]\.\s*[А-ЯЁ][а-яё]++|[А-ЯЁ][а-яё]++\s*[А-ЯЁ]\.\s*[А-ЯЁ]\.))~msu


-----
PostgreSQL DBA
 
 Top
TheRealKos
Отправлено: 04 Мая, 2014 - 18:04:52
Post Id



Новичок


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


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




Мелкий пишет:
Это реальный текст с вот так вот хаотично расставленными br?

Нет) Я считываю текст из .doc или .docx формата (в случае с .docx заменяю теги переноса на тег <br />). И вот такой вот текст получается...

Попробовал написанное вами регулярное выражение, через онлайн сервис там все работает, сейчас не удается правильно записать в пхп
PHP:
скопировать код в буфер обмена
  1. $result_rukov = preg_match_all('/(?i)(?:Научный)?\s*руководитель(?-i).+?((?:[А-ЯЁ]\.\s*[А-ЯЁ]\.\s*[А-ЯЁ][а-яё]++|[А-ЯЁ][а-яё]++\s*[А-ЯЁ]\.\s*[А-ЯЁ]\.))/msu', $open, $found_rukov)


В итоге var_dump($found_rukov) возвращает NULL...
(Добавление)
Эх...пытался еще сделать с консультантом по подобию, с ним так не выходит... Огорчение

(Отредактировано автором: 04 Мая, 2014 - 18:13:00)

 
 Top
Мелкий Супермодератор
Отправлено: 04 Мая, 2014 - 18:28:56
Post Id



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


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


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




TheRealKos пишет:
В итоге var_dump($found_rukov) возвращает NULL...

Проверьте свой error_reporting.
NULL там быть не может. Если совпадений нет - будет пустой массив, но не null.
null при отключённых E_NOTICE может быть при обращении к не инициализированной переменной - опечатке в названии, например.

TheRealKos пишет:
Эх...пытался еще сделать с консультантом по подобию, с ним так не выходит...

Эти ваши br не просто мешают, а неимоверно мешают.
Поищите сперва способ достать текст в каком-нибудь более приличном виде.


-----
PostgreSQL DBA
 
 Top
TheRealKos
Отправлено: 04 Мая, 2014 - 18:41:32
Post Id



Новичок


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


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




Сделал не msu, а msU, вот тогда уже возвращает пустой массив.

Мелкий пишет:
Поищите сперва способ достать текст в каком-нибудь более приличном виде.

Очень много все перерыл, перечитал, но это единственный более менее нормальный способ Огорчение
(Добавление)
Можно конечно через str_replace заменить эти теги на что нибудь, но менял на пустое место, ну и текст в результате без переносов был...

(Отредактировано автором: 04 Мая, 2014 - 18:57:50)

 
 Top
duhon
Отправлено: 14 Мая, 2014 - 18:53:45
Post Id



Гость


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


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




PHP:
скопировать код в буфер обмена
  1. $regex = '~(?(DEFINE)(?<s>\s|<br\s*/?>|\R)(?<i>(?-i:[А-ЯЁ]\.\s*){2})(?<n>(?-i:[А-ЯЁ][а-яё]+)))(?:научный(?&s))?руководитель(?&s)*.*?((?&i)(?&n)|(?&n)\s+(?&i))(?&s)*~uis';

пробуй
 
 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