Регулярка

malls
На сайте с 08.08.2005
Offline
255
502

Имеем текст ($txt):

В. Пупкин, Ф. Васькин, С.М. Дедкин и Н. С. Федоров, and also John F. Kennedy пошли гулять по Детройту. Вернулись не все.

Надо грохнуть из текста все одиночные символы с точками после них (т.е. инициалы), кроме соответственно концов предложений. Предполагаем что инициал это одна буква перед которой пробел и т.п., а после нее точка.

Конструкция:

$txt = preg_replace("~[ \n\r\t]+[а-яА-Яa-zA-Z][\.]~"," ", $txt);

Что я делаю не так?

T
На сайте с 20.03.2007
Offline
67
Toy
#1

echo preg_replace("#\s?[А-ЯA-Z]\.#su","", "В. Пупкин, Ф. Васькин, С.М. Дедкин и Н. С. Федоров, and also John F. Kennedy пошли гулять по Детройту. Вернулись не все.");
malls
На сайте с 08.08.2005
Offline
255
#2

Блин сам допер уже - именно u, тем смешнее выглядит, что ночи не прошло как прикалывался на bearman в абсолютно аналогичном топике...

Лошара ми кантара...

Надо спать!...

scorpion061181
На сайте с 20.01.2010
Offline
3
#3
Toy:
echo preg_replace("#\s?[А-ЯA-Z]\.#su","", "В. Пупкин, Ф. Васькин, С.М. Дедкин и Н. С. Федоров, and also John F. Kennedy пошли гулять по Детройту. Вернулись не все.");

Такая регулярка может поудалять лишнего, например, если в конце предложения встретиться большая буква.

Лучше сделать "#[\s\.][А-ЯA-Z]\.#su"

T
На сайте с 20.03.2007
Offline
67
Toy
#4

scorpion061181, понимаете что написали?

Что касается решения проблемы предложенной вами, я бы поступил так

echo preg_replace("#\s?[А-ЯA-Z]\..\.?#su"," ", "В. Пупкин, Ф. Васькин, С.М. Дедкин и Н. С. Федоров, and also John F. Kennedy пошли гулять по Детройту. Вернулись не все. Ы.");
[Удален]
#5

топик добра!

scorpion061181
На сайте с 20.01.2010
Offline
3
#6

Мозг не варит, спать охота сильно. Да и в регулярках не сильно силен. Поэтому провел эксперимент.

Исходный текст: "Пришел МеДвеД. В лес. Ы."

"#\s?[А-ЯA-Z]\.#su". Результат:

"Пришел МеДве В лес."

"#\s?[А-ЯA-Z]\..\.?#su". Результат:

"Пришел МеДвеВ лес. Ы."

"#[\s\.][А-ЯA-Z]\.#su". Результат:

Пришел МеДвеД. В лес.

Думаю мы оба не совсем правы.

[Удален]
#7

сейчас глаза продиру, придумаю вам регулярку если не забуду :)

bearman добавил 20.01.2010 в 17:38

я в регулярках тоже не силен, провел эксперимент


<?
$text = "В. Пупкин, Ф. Васькин, С.М. Дедкин и Н. С. Федоров, and also John F. Kennedy пошли гулять по Детройту. Вернулись не все.";

header("Content-type: text/html; charset=utf-8");

while($text != ($t = preg_replace("#(?:^|\s+)(?:[а-яА-Яa-zA-Z]\.)+(?:\s+|$)#u", " ", $text)))
{
$text = $t;
}

echo $text;

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий