Ru-Board.club
← Вернуться в раздел «Web-программирование»

» Помогите с preg_replace() пожалуйста.

Автор: erroraccount
Дата сообщения: 19.04.2016 00:27
Пытаюсь из текста удалить фамилии, которые имеют такой вид: И.И.Иванов

Искать пытаюсь по принципу: (Первая буква в верхнем регистре + точка + буква в верхнем регистре + точка + буква в верхнем регистре + одна или более букв в нижнем регистре)

Но, видать, с ошибками написал. Помогите пожалуйста новичку.


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

$pattern = '[A-Z]\.[A-Z]\.[A-Z][a-z]+';
$replacement = '';
echo preg_replace($pattern, $replacement, $string);
?>
Автор: Mavrikii
Дата сообщения: 19.04.2016 00:32
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);
Автор: erroraccount
Дата сообщения: 19.04.2016 01:12
Спасибо. Получилось.
А что значит /u ?

\b граница слова
Это значит точка, пробел, перенос строки или запятая? Или я ошибаюсь?
Автор: Mavrikii
Дата сообщения: 19.04.2016 01:19
erroraccount

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

уникод


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

не символ, не цифра, не подчеркивание идущее следом за ними
Автор: erroraccount
Дата сообщения: 19.04.2016 06:45
Спасибо большое.
А если в тексте будет кроме такого написания И.И.Иванов, будут еще в разных вариациях, например:
И. И. Иванов
И. Иванов
Иванов И. И.

как мне показать, что надо кроме этих условий еще выполнять и другие? Т. е. сами комбинации я наверное смогу составить. Видимо как-то так:

Код: И.И.Иванов - '/[А-ЯЁ]\.[А-ЯЁ]\.[А-ЯЁ][а-яё]+\b/u'
И. И. Иванов - '/[А-ЯЁ]\.\s[А-ЯЁ]\.\s[А-ЯЁ][а-яё]+\b/u'
И.Иванов - '/[А-ЯЁ]\.[А-ЯЁ][а-яё]+\b/u'
И. Иванов - '/\s[А-ЯЁ]\.\s[А-ЯЁ][а-яё]+\b/u'
Иванов И. И. - '/[А-ЯЁ][а-яё]+[А-ЯЁ]\.\s[А-ЯЁ]\.\s[А-ЯЁ]\b/u'
Иванов И. - '/[А-ЯЁ][а-яё]+[А-ЯЁ]\.\s[А-ЯЁ]\.\b/u'
Иванов И.И. - '/[А-ЯЁ][а-яё]+[А-ЯЁ]\.\s[А-ЯЁ]\.[А-ЯЁ]\b/u'
Автор: Mavrikii
Дата сообщения: 19.04.2016 06:48
erroraccount
тема указана была, где такое спрашивают.


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

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


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

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

Страницы: 1

Предыдущая тема: Ajax в ссылке


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.