Forum Webscript.Ru

Программирование => Регулярные выражения => Тема начата: tarya от 05 Января 2004, 16:11:49

Название: Замучался уже
Отправлено: tarya от 05 Января 2004, 16:11:49
Привет.

Мне тут нужно по зарез отыскать в строке такую штуку - строка в которой есть слово любой длины, возможно два слова и более за которым сразу без пробела открываются кавычки и далее продолжается в кавычках слово или более за которым кавычки закрываюся и продолжается текст.

пример: Энергоспецремонт АЭК"Киевэнерго" - нужно отыскать АЭК"  и вставить между ними пробел.


Уже измучался, несколько часов сижу, .. но невышло ничего, просто отыскиваю  слова с кавычками и все..


помогите если кто может.

спасибо.
Название: Поиск текста в строке по заданному шаблону
Отправлено: Phoinix от 05 Января 2004, 16:22:03
Может так (на вскидку, без проверки)...

~s /^([А-Яа-яЁё\\s\\w]+)\\"(.*)$/$1 \\"$2/

P.S. исправил - съел слеши
еще раз исправил после проверки...
Название: Поиск текста в строке по заданному шаблону
Отправлено: ondr от 05 Января 2004, 16:25:36
s/(\\S)(".+?")/$1 $2/sg;
Название: Поиск текста в строке по заданному шаблону
Отправлено: tarya от 05 Января 2004, 19:35:34
:)

то ничего неработало, зато я написал может и неправильно но заработало

^([A-Za-zА-Яа-яЁё0-9\\.ІіЇїЄє\\s\\w\\-]+)*["-]([A-Za-zА-Яа-яЁё0-9\\.ІіЇїЄє\\ \\s\\w\\-]+)*"([A-Za-zА-Яа-яЁё0-9\\.ІіЇїЄє\\ \\s\\w\\-]+)*$
Название: Поиск текста в строке по заданному шаблону
Отправлено: Phoinix от 05 Января 2004, 20:53:50
tarya
Весьма странно, что на моем примере, что на примере ondr
у меня получался правильный ответ:

Энергоспецремонт АЭК"Киевэнерго" bla bla bla -> Энергоспецремонт АЭК "Киевэнерго" bla bla bla

Может просто кто-то неправильно задал вопрос? :)
Название: Поиск текста в строке по заданному шаблону
Отправлено: tarya от 06 Января 2004, 13:23:23
странно, конечно может и я чтото неправильно делаю, ... беребирациклом из базы данных строки и сверяю их через

$soc = ereg_replace (\'^([A-Za-zА-Яа-яЁё0-9\\.ІіЇїЄє\\s\\w\\-]+)*["-]([A-Za-zА-Яа-яЁё0-9\\.ІіЇїЄє\\ \\s\\w\\-]+)*"([A-Za-zА-Яа-яЁё0-9\\.ІіЇїЄє\\ \\s\\w\\-]+)*$\', \'\\\\1 "\\\\2"\', $row[sokr]);


странно но когда я использовал твой запрос, ничего проти него неимею но он ничего вообще ненаходил, воообще ноль

$soc = ereg_replace (\'~s /^([А-Яа-яЁё\\s\\w]+)\\"(.*)$/$1 \\"$2/\', \'\\\\1 "\\\\2"\', $row[sokr]);

вот так ноль...


а запрос парня второго вообще только ошибку выдавало.
Название: Поиск текста в строке по заданному шаблону
Отправлено: ondr от 06 Января 2004, 13:50:29
s/(\\S)(".+?")/$1 $2/sg; - это perl

Вот тебе для php: preg_replace(\'/(\\S)(".+?")/s\', \'\\\\1 \\\\2\', $your_var);
Название: Поиск текста в строке по заданному шаблону
Отправлено: Phoinix от 06 Января 2004, 13:51:57
tarya
Ты просто не правильно понял конструкцию:

~s /^([А-Яа-яЁё\\s\\w]+)\\"(.*)$/$1 \\"$2/
где:
^([А-Яа-яЁё\\s\\w]+)\\"(.*)$ - что искать;
$1 \\"$2 - на что заменять

Сотвественно:
s/(\\S)(".+?")/$1 $2/sg;
(\\S)(".+?") - что искать;
$1 $2 - на что заменять;
sg - как заменять...