Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Помогите с preg_replace() пожалуйста.

Модерирует : Cheery

articlebot (20-04-2016 02:15): PHP: Регулярные выражения (RegExp, Regular, eregi, preg)  Версия для печати • ПодписатьсяДобавить в закладки

   

erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пытаюсь из текста удалить фамилии, которые имеют такой вид: И.И.Иванов
 
Искать пытаюсь по принципу: (Первая буква в верхнем регистре + точка + буква в верхнем регистре + точка + буква в верхнем регистре + одна или более букв в нижнем регистре)
 
Но, видать, с ошибками написал. Помогите пожалуйста новичку.
 

Код:
<?php
$string = 'ЗАВТРАК у тов. В.М.МОЛОТОВА
        ПО СЛУЧАЮ ПЯТНАДЦАТИЛЕТИЯ СОВЕТСКО-ТУРЕЦКОГО ДОГОВОРА
        В связи с исполнившимся 15-летием первого советско-турецкого договора о дружбе, 23 марта с. г. председатель Совета народных комиссаров Союза ССР тов. В.М.Молотов дал завтрак чрезвычайному и полномочному послу Турецкой республики - г-ну Зекяи Апайдын.
        На завтраке присутствовали товарищи: К.Е.Ворошилов, Л.М.Каганович, Г.К.Орджоникидзе, А.И.Микоян, В.И.Меж-Лаук, Н.К.Антипов, А.П.Розеигольп, Н.Н.Крестинский, А.С.Бубнов, Ю.Л.Пятаков, Б.С.Стомоняков, А.И.Егоров, С.М.Буденный, А.М.Могильный, а также ответственные сотрудники Народного комиссариата по иностранным делам и высшие чины турецкого посольства. Во время завтрака тов. В.М.Молотов и г-н Зекяи Апайдын обменялись приветственными речами.';
         
$pattern = '[A-Z]\.[A-Z]\.[A-Z][a-z]+';
$replacement = '';
echo preg_replace($pattern, $replacement, $string);
?>

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 00:27 19-04-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount
PHP: Регулярные выражения (RegExp, Regular, eregi, preg) !!

Цитата:
[A-Z]\.[A-Z]\.[A-Z][a-z]+
- для латинницы, ну и неправильно, так как нет символов открывающих и закрывающих регулярку. плюс нужно знать в какой кодировке текст - уникод или 1251
 
если уникод, то, к примеру

Код:
$string = 'ЗАВТРАК у тов. В.М.МОЛОТОВА
        ПО СЛУЧАЮ ПЯТНАДЦАТИЛЕТИЯ СОВЕТСКО-ТУРЕЦКОГО ДОГОВОРА
        В связи с исполнившимся 15-летием первого советско-турецкого договора о дружбе, 23 марта с. г. председатель Совета народных комиссаров Союза ССР тов. В.М.Молотов дал завтрак чрезвычайному и полномочному послу Турецкой республики - г-ну Зекяи Апайдын.
        На завтраке присутствовали товарищи: К.Е.Ворошилов, Л.М.Каганович, Г.К.Орджоникидзе, А.И.Микоян, В.И.Меж-Лаук, Н.К.Антипов, А.П.Розеигольп, Н.Н.Крестинский, А.С.Бубнов, Ю.Л.Пятаков, Б.С.Стомоняков, А.И.Егоров, С.М.Буденный, А.М.Могильный, а также ответственные сотрудники Народного комиссариата по иностранным делам и высшие чины турецкого посольства. Во время завтрака тов. В.М.Молотов и г-н Зекяи Апайдын обменялись приветственными речами.';
 
$pattern = '/[А-ЯЁ]\.[А-ЯЁ]\.[А-ЯЁ][а-яё]+\b/u';
$replacement = '';
echo preg_replace($pattern, $replacement, $string);

Всего записей: 15101 | Зарегистр. 20-09-2014 | Отправлено: 00:32 19-04-2016 | Исправлено: Mavrikii, 00:55 19-04-2016
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо. Получилось.
А что значит /u ?
 
\b граница слова
Это значит точка, пробел, перенос строки или запятая? Или я ошибаюсь?

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 01:12 19-04-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount

Цитата:
А что значит /u  

уникод
 

Цитата:
Это значит точка, пробел, перенос строки или запятая?

не символ, не цифра, не подчеркивание идущее следом за ними

Всего записей: 15101 | Зарегистр. 20-09-2014 | Отправлено: 01:19 19-04-2016
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо большое.
А если в тексте будет кроме такого написания И.И.Иванов, будут еще в разных вариациях, например:
И. И. Иванов
И. Иванов
Иванов И. И.
 
как мне показать, что надо кроме этих условий еще выполнять и другие? Т. е. сами комбинации я наверное смогу составить. Видимо как-то так:

Код:
И.И.Иванов - '/[А-ЯЁ]\.[А-ЯЁ]\.[А-ЯЁ][а-яё]+\b/u'
И. И. Иванов - '/[А-ЯЁ]\.\s[А-ЯЁ]\.\s[А-ЯЁ][а-яё]+\b/u'
И.Иванов - '/[А-ЯЁ]\.[А-ЯЁ][а-яё]+\b/u'
И. Иванов - '/\s[А-ЯЁ]\.\s[А-ЯЁ][а-яё]+\b/u'
Иванов И. И. - '/[А-ЯЁ][а-яё]+[А-ЯЁ]\.\s[А-ЯЁ]\.\s[А-ЯЁ]\b/u'
Иванов И. - '/[А-ЯЁ][а-яё]+[А-ЯЁ]\.\s[А-ЯЁ]\.\b/u'
Иванов И.И. - '/[А-ЯЁ][а-яё]+[А-ЯЁ]\.\s[А-ЯЁ]\.[А-ЯЁ]\b/u'

Но как их перечислить? Пробовал "|" - "или", но ошибка синтаксиса.
 
И еще, как указать слова начинающиеся с буквы верхнего регистра в середине предложения?

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 06:45 19-04-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount
тема указана была, где такое спрашивают.
 

Цитата:
но ошибка синтаксиса

/рег1|рег2|рег3/u
 

Цитата:
И еще, как указать слова начинающиеся с буквы верхнего регистра в середине предложения?

? никак, для регулярки нет понятия "середины" предложения, это уже сами должны думать как выбирать подобные вещи. наверно что перед этим нет точки или вопроса или воскл знака

Всего записей: 15101 | Зарегистр. 20-09-2014 | Отправлено: 06:48 19-04-2016
   

Компьютерный форум Ru.Board » Интернет » Web-программирование » Помогите с preg_replace() пожалуйста.
articlebot (20-04-2016 02:15): PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru