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. TheRealKos - 04 Мая, 2014 - 16:44:54 - перейти к сообщению
Доброго времени суток. Есть два текста:
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 ]+)

Выдает:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Чубака А. К.


Для второго вроде бы нормально, а для первого беда...И как то нужно еще сделать вместе, т.к. уже говорил, текст случайно выдает, и может быть как 1 так и 2.
2. Мелкий - 04 Мая, 2014 - 17:26:55 - перейти к сообщению
Это реальный текст с вот так вот хаотично расставленными br?

CODE (regex):
скопировать код в буфер обмена
  1. ~(?i)(?:Научный)?\s*руководитель(?-i).+?((?:[А-ЯЁ]\.\s*[А-ЯЁ]\.\s*[А-ЯЁ][а-яё]++|[А-ЯЁ][а-яё]++\s*[А-ЯЁ]\.\s*[А-ЯЁ]\.))~msu
3. TheRealKos - 04 Мая, 2014 - 18:04:52 - перейти к сообщению
Мелкий пишет:
Это реальный текст с вот так вот хаотично расставленными 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...
(Добавление)
Эх...пытался еще сделать с консультантом по подобию, с ним так не выходит... Огорчение
4. Мелкий - 04 Мая, 2014 - 18:28:56 - перейти к сообщению
TheRealKos пишет:
В итоге var_dump($found_rukov) возвращает NULL...

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

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

Эти ваши br не просто мешают, а неимоверно мешают.
Поищите сперва способ достать текст в каком-нибудь более приличном виде.
5. TheRealKos - 04 Мая, 2014 - 18:41:32 - перейти к сообщению
Сделал не msu, а msU, вот тогда уже возвращает пустой массив.

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

Очень много все перерыл, перечитал, но это единственный более менее нормальный способ Огорчение
(Добавление)
Можно конечно через str_replace заменить эти теги на что нибудь, но менял на пустое место, ну и текст в результате без переносов был...
6. duhon - 14 Мая, 2014 - 18:53:45 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $regex = '~(?(DEFINE)(?<s>\s|<br\s*/?>|\R)(?<i>(?-i:[А-ЯЁ]\.\s*){2})(?<n>(?-i:[А-ЯЁ][а-яё]+)))(?:научный(?&s))?руководитель(?&s)*.*?((?&i)(?&n)|(?&n)\s+(?&i))(?&s)*~uis';

пробуй

 

Powered by ExBB FM 1.0 RC1