Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка строки при помощи рег. выражений 
:(
    Опции темы
PROme
  Дата 18.3.2005, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



Опять проблема с регами.
Еще не успел их усвоить... есть не сложно, прошу помощи, очень надо smile

итак есть строка, например:

$str='цитата:"О да! Так оно и есть..."';

т.е. текст строки - цитата:"О да! Так оно и есть..."
мне нужно непосредственно перед закрывающими кавычками вставит строку '(копирайт...)', т.е. чтоб было так:

цитата:"О да! Так оно и есть...(копирайт...)"

вместо двойных кавычек в строке иногда идут одинатные - т.е.

цитата:'О да! Так оно и есть...'

бывает - вообще ничего, т.е.

цитата:О да! Так оно и есть...

но в таком случае конец цитаты можно определить по пробелу
в начале цитаты всегда идет "цитата:"
т.е. алгорим понятен - ищем "цитата:", пропускаем один символ (думаю, понятно зачем), а далее ищем двойную или одинарную кавычку или пробел и перед найденым ставим "(копирайт...)"

но вот как это сделать на регах ???
очень прошу помочь smile


--------------------
SEO-мастер
PM MAIL WWW   Вверх
IZ@TOP
Дата 19.3.2005, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Может так:

Код

preg_match("%^цитата:['|\"](.*)['\"]$%ui", $text, $match);
print_r($match);



--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
S.A.P.
Дата 19.3.2005, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 3
Всего: 71



PROme а как ты будешь распознавать конец цитаты, когда кавычек вобще не будет?.
PM MAIL   Вверх
PROme
Дата 19.3.2005, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



IZ@TOP нет, что-то не то... пока еще слабо знаю реги чтоб определить что именно smile
сейчас еще пойду чего-нить почитаю


Perchilla читаем внимательней, писал же:

Цитата
но в таком случае конец цитаты можно определить по пробелу


т.е. после "цитата:" может идти пробел или не пробел - для этого я и писал что первый символ после этой строки пропускаем, а вот уже перед следующим символом " или ' или пробелом, необходимо вставлять "(копирайт...)"

спасибо за ответы

если кто может чем помочь, очень прошу

пока еще сам попытаюсь что-то сделать


--------------------
SEO-мастер
PM MAIL WWW   Вверх
PROme
Дата 19.3.2005, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



Perchilla понял твой вопрос smile
забыл дописать - сама цитата в себе пробелов не имеет (одно целое слово)

Это сообщение отредактировал(а) PROme - 19.3.2005, 08:47


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Mal Hack
Дата 19.3.2005, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Можно так попробовать:
Код

$str=preg_replace( "#(цитата:\s*(\"|\')(.+?))(\\2|\.)#e" , "\\1 (копирайт)\\4" , $str );

PM ICQ   Вверх
PROme
Дата 19.3.2005, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



Mal Hack спасибо уже ближе... smile
вот только не пойму что именно ему не нравится?

Parse error: parse error, unexpected ':' in z:\home\localhost\www\_\3.php(4) : regexp code on line 1

Fatal error: Failed evaluating code: цитата:\"О_да!_Так_оно_и_есть (копирайт). in z:\home\localhost\www\_\3.php on line 4

Код

<?php

$str='цитата:"О_да!_Так_оно_и_есть..."';
$str=preg_replace( "#(цитата:\s*(\"|\')(.+?))(\\2|\.)#e" , "\\1 (копирайт)\\4" , $str );
echo "$str";

?>



--------------------
SEO-мастер
PM MAIL WWW   Вверх
IZ@TOP
Дата 19.3.2005, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Код

$str    = 'Цитата: "Тот, кто долго думает, прежде чем сделать шаг, всю жизнь проживет на одной ноге."';
$str    = preg_replace("%(цитата:\s?[\"|\'](.*?)[\"|\'])%i", "\\1 (C) IZ@TOP", $str);
echo $str;
Может это подойдет?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
PROme
Дата 19.3.2005, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



IZ@TOP smile спасибо, выручальник
я немного подправил, можешь сказать, не напортачил ли я чего? (оно работает, но все равно, согласно синтаксису... а то я его не знаю smile )

Код

<?php

$str = 'Цитата:"Тот,_кто_долго_думает,_прежде_чем_сделать_шаг,_всю_жизнь_проживет_на_одной_ноге."';
$str = preg_replace("%(цитата:\s?[\"|\'|' '](.*?))([\"|\'|' '])%i", "\\1 (C) IZ@TOP\\3", $str);
echo $str;

?>


я добавил пробелы (если цитата без скобок, сам текст цитаци пробелов в момент проверки содержать не будет, в данном случае только в конце цитаты будет пробел)
а также сделал так, чтобы © IZ@TOP добавлялся перед закрывающей скобкой (я об этом писал что так надо...)
Добавлено @ 11:39
и еще вопрос возник по теме...
пока все в зборе smile

Код

$str=preg_replace("/IZO.*?TOP/i", "", $str);


удалит все, начиная с IZO и заканчивая TOP
а как сделать чтоб он сделал то же самое, но, например, только в том случае, если между IZO и TOP имеется, например IS ? вроде просто, но что-то глючит smile


--------------------
SEO-мастер
PM MAIL WWW   Вверх
IZ@TOP
Дата 19.3.2005, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Код
$str = 'Цитата:"Тот,_кто_долго_думает,_прежде_чем_сделать_шаг,_всю_жизнь_проживет_на_одной_ноге."';
$str = preg_replace("%(цитата:\s?[\"|\'|\s](.*?))([\"|\'|\s])\s?%i", "\\1 © IZ@TOP\\3", $str);
echo $str;
Думаю так будет вернее. В рег. выражениях, в качестве определения пробела используется сочетание \s.

Цитата
удалит все, начиная с IZO и заканчивая TOP
а как сделать чтоб он сделал то же самое, но, например, только в том случае, если между IZO и TOP имеется, например IS ?

Скобочки забыл smile
Код

$str=preg_replace("/(IZO(.*?)TOP)/i", "", $str);



--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
PROme
Дата 19.3.2005, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



Цитата
Думаю так будет вернее. В рег. выражениях, в качестве определения пробела используется сочетание \s.

ну я тоже так думал... smile
спасибо

Цитата
Скобочки забыл

угу, но оно, в принципе, и без скобок работоспособно smile
но все же "Думаю так будет вернее" smile
только вопрос был немного в другом - нужно то же самое, но только в том случае, когда между IZO и TOP стоит заданная строка... smile
поможешь еще с этим? smile


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Mal Hack
Дата 19.3.2005, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(IZ @ 19.3.2005, 11:46)
\s?[\"|\'|\s](

А зачем так сложно?
Вот на 4 вариантах потестил.

Код
$str = "Цитата: фывфывфыв";
$str = "Цитата: фывфывфыв.";
$str = "Цитата: \"фывфывфы\"";
$str = "Цитата: \'фывфывфы\'";
print $str=preg_replace( "#(Цитата:\s*(\"|\')*(.+?))(\\2|\.|$)#i" , "\\1 (êîïèðàéò)\\4" , $str );

PM ICQ   Вверх
PROme
Дата 19.3.2005, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



Mal Hack спасибо, а что выполняет (\\2|\.|$) ?
и зачем # ?
да, а кто сможет подсказать с вторым вопросом? smile


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Mal Hack
Дата 19.3.2005, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Mal @ 19.3.2005, 13:34)
#(Цитата:\s*(\"|\')*(.+?))(\\2|\.|$)#i

Цитата, двоеточие, затем пробел 0 или более раз, затем " или ' 0 или более раз, правда надо заменить * на {0,1}, затем любой другой символ, затем (заканчиваем), либо то, что нашлось во вторых скобках (т.е. " или ' ) либо точка, либо конец строки.
Вообще я думаю лучше будет так:
Цитата
"#(Цитата:\s*(\"|\'){0,1}(.+?))(\\2|\.|)\s*$#i"

Добавлено @ 14:05
Цитата(PROme @ 19.3.2005, 14:00)
и зачем # ?

Привык я писать # smile
PM ICQ   Вверх
PROme
Дата 19.3.2005, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



мда, с вторым вопросом что-то я протупил smile
сделал так:

Код

$str=preg_replace("/(IZO(.*?)(123)(.*?)TOP)/i", "", $str);


123 - текст, при наличии которого между IZO и TOP нужно все это удалять...
нормально сделал или есть замечения?

ну вроду с вопросами все
спасибо всем за помощь! smile


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0592 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.