regex помощ

BullBlogger

New Member
Имам следното изречение:

Код:
When he left NASA, he explored underwater adventures as an aquanaut in the Navy’s Man in the Sea Project. Said John Glenn. It was about 30 minutes before the start of a NASA.

Искам да разкарам "Said John Glenn. "

и да остане чистото

Код:
When he left NASA, he explored underwater adventures as an aquanaut in the Navy’s Man in the Sea Project. It was about 30 minutes before the start of a NASA.

Обстоятелства, с които трябва да се съобразя

1. възможно е нежелания пасаж да е в началото, в средата или в края на целия текст
2. Нежелания стринг винаги започва със 'Said ' и следва име.
3. Името за мое огромно съжаление може да изглежда и така John F. Kennedy или така Dr. Alban или дори така Maria-Antoaneta Tudor

Ако името не съдържа символи като точка, тире или апостроф (O'Henry) регекса е лесен

Код:
echo preg_replace('/(Said )\w+\s\w+\.\s/', '', $string);

Някакви идеи как да отрежа всичко, което попада в критериите в рамките на 20 символа след 'Said '. На прост език предпочитам да изгубя случайно изречение, което започва със Said отколкото да ми остане някакво неотрязано парче от име. Иде реч за php
 
Може да погледнеш тази страница, където в първия пример има подобна функция, която премахва нежеланите символи.
Предполагам ще ти дойде някаква идея за решение на горния ти проблем.
 
Може да погледнеш тази страница, където в първия пример има подобна функция, която премахва нежеланите символи.
Предполагам ще ти дойде някаква идея за решение на горния ти проблем.

Благодаря Краси, сега ще фърля едно очо и ще си поиграя.

ПП Междувременно ако някой регекс гений се появи няма да откажа акъл.
 
От: Re: regex помощ

Значи ако ползваш ей тоя израз: /Said\s+\w+([\s\w\'-]+.)([\s\w\'-]+.)?/s може да мачнеш следното:

Код:
When he left NASA, he explored underwater adventures as an aquanaut in the Navy’s Man in the Sea Project. [b]Said John F. O'Henry.[/b] It was about 30 minutes before the start of a NASA.

В квадратните скоби описваш позволените символи: \s\w\'- в случая интервали, символи, апостров или тире. С + показваш, че позволените символи трябва да се повтарят 1 или повече пъти. Думата завършва с точка след плюса.

След вторите скоби има ?, което че рече, че тая втората дума може и да я няма. Така можеш да си добавиш 3-4 думи или колкото смяташ, че може да имаш максимално.
 
Re: От: Re: regex помощ

Значи ако ползваш ей тоя израз: /Said\s+\w+([\s\w\'-]+.)([\s\w\'-]+.)?/s може да мачнеш следното:

Код:
When he left NASA, he explored underwater adventures as an aquanaut in the Navy’s Man in the Sea Project. [b]Said John F. O'Henry.[/b] It was about 30 minutes before the start of a NASA.

В квадратните скоби описваш позволените символи: \s\w\'- в случая интервали, символи, апостров или тире. С + показваш, че позволените символи трябва да се повтарят 1 или повече пъти. Думата завършва с точка след плюса.

След вторите скоби има ?, което че рече, че тая втората дума може и да я няма. Така можеш да си добавиш 3-4 думи или колкото смяташ, че може да имаш максимално.


хмм, да бе, тва също е хитро. репичка
 
уффф извинявам се - днес съм малко тъп

Код:
echo preg_replace('/(Said )[A-Za-z\s.\'-]+\.\s/', '', $proba);

Почти бях стигнал до същото, но си блъсках главата с това Navy’s и по-точно апострофа. Ама кухата лейка не се сеща, че не съм сменил кодировката на файла да са е*а :Д
 

Горе