Модераторы: 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   Вверх
PROme
Дата 20.3.2005, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

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

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

и если цитата начинается на

О да!

то с ней делаем то, что делали раньше (добавляем в конец...), а если начинается с

О нет!

то мы с ней ничего не делаем.... такое вообще можно на регах сделать?


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


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


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

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



Код
print $str=preg_replace( "#(Цитата:\s*(\"|\')*((О Да !).+?))(\\2|\.|$)#i" , "\\1 (копирайт)\\4" , $str );

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


Опытный
**


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

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



Mal Hack спасибо smile
виноват, немного некорректно поставил вопрос
в таком то проблем нет
я хотел сказать что если начинается с, например

О нет!

тогда не заменять
а в любом другом случае - заменять
т.е. может быть и

О да!
О я не знаю!
и т.д. smile


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


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


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

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



PROme, что-то в этом роде:
Код

if(!strpos(strtolower($text), 'о нет!')) {
 // вып. рег. замену
}



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

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0640 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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