Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

проблема с регулярными выражениями в PHP

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
cosmo
Гость





СообщениеДобавлено: Ср Окт 20 2004 00:36    Заголовок сообщения: проблема с регулярными выражениями в PHP Ответить с цитатой

Господа, с очень странной проблемой вдруг столкнулся. Помогите советом или намёком.

Задача: Избавиться от дублирующих записей.

Код:

<?php
$content = "slava slava misha misha petya petya ";
$content = preg_replace ("/([a-z]+\s)\1/","\1",$content);
echo $content;
?>

И почему-то не работает...

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

У меня WinXP, Apache 1.3.31, PHP 4.3.4
Вернуться к началу
Scaramouch



Зарегистрирован: 11.01.2004
Сообщения: 143
Откуда: Столица нашей Родины

СообщениеДобавлено: Ср Окт 20 2004 08:33    Заголовок сообщения: Ответить с цитатой

$content = preg_replace ("/([a-z]+\s)\\1/", "\\1", $content);

Ничего странного, просто читай мануалы внимательнее
_________________
Ноги - это две лишние руки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
cosmo
Гость





СообщениеДобавлено: Ср Окт 20 2004 11:10    Заголовок сообщения: Ответить с цитатой

Уважаемый Scaramouch...огромное спасибо, всё заработало....но один вопрос всё-таки остался.

Цитата:
Ничего странного, просто читай мануалы внимательнее


Как раз в мануале-то и написано, что экранирование обратного слэша нужно лишь в том случае, если сам обратный слэш является искомым символом. А в моём случае он используется для записи обратной ссылки.
Вернуться к началу
Scaramouch



Зарегистрирован: 11.01.2004
Сообщения: 143
Откуда: Столица нашей Родины

СообщениеДобавлено: Ср Окт 20 2004 14:43    Заголовок сообщения: Ответить с цитатой

Да, действительно, я только что посмотрел, на http://ru.php.net/manual/ru/pcre.pattern.syntax.php
написано с одним слешом.
Но смотри http://ru.php.net/manual/ru/function.preg-replace.php
- там много примеров и все с двумя слешами.
Так что на первой странице ошибка.
Почему нужно два слеша? Просто проверь, что тебе выведет
echo "\\"; и echo '\\'; Smile
Заодно проверь "\1" - увидишь много интересногоSmile
Учти, что СНАЧАЛА проводится так называемая интерполяция строк(подробнее можешь прочитать на http://ru.php.net/manual/ru/language.types.string.php, только учти, там тоже есть ошибки, связанные с одинарными кавычками, проверяй все на практике) и только ПОТОМ вызывается preg_replace
_________________
Ноги - это две лишние руки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
cosmo
Гость





СообщениеДобавлено: Чт Окт 21 2004 00:36    Заголовок сообщения: Ответить с цитатой

Эх, чувствую мне надолго хватит пищи для размышлений...однако я прямо таки физически ощущаю что мой IQ набирает вес (жалко медлено) Smile

И на последок, если это тебя не очень затруднит, не мог бы ты ответить ещё на один вопрос:

Представь, что я загоняю в массив текстовой файл, где слова расположены в столбик (т.е. после каждого слова идёт \r), обязательно ли переводить этот столбец в строку для выполнения той же задачи, т. е. поиска повторов. Поскольку нижеприведённый код не работает.

Файл data.txt :
slava
slava
misha
misha

<?php
$content = file("data.txt");
$content = preg_replace("/([a-z]+)\r\n\\1/","\\1",$content);
?>
Вернуться к началу
petya
Гость





СообщениеДобавлено: Чт Окт 21 2004 00:52    Заголовок сообщения: zdarova cosmatii! Ответить с цитатой

petya - eto ya, slava - eto ti. a misha kto? )
Вернуться к началу
cosmo
Гость





СообщениеДобавлено: Чт Окт 21 2004 02:25    Заголовок сообщения: Ответить с цитатой

Только что понял, что предыдущим вопросом произвёл себя в почётные ламеры.

Функция file() создаёт массив, где элементами являются строки файла, а регулярные выражения производят поиск в строке, но не сравнивают один элемент массива с другим, потому и не работает...Sad
Вернуться к началу
Scaramouch



Зарегистрирован: 11.01.2004
Сообщения: 143
Откуда: Столица нашей Родины

СообщениеДобавлено: Чт Окт 21 2004 08:45    Заголовок сообщения: Ответить с цитатой

Естесственно, реги не имеют отношения к твоей задаче.
Тебе надо либо объединить массив в строку implode, обработать строку регом а потом разбить в массив explode - но намного правильнее будет воспользоваться встроенной функцией array_unique
_________________
Ноги - это две лишние руки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
cosmo
Гость





СообщениеДобавлено: Вс Окт 24 2004 02:40    Заголовок сообщения: Ответить с цитатой

Буквально за пару часов до твоего ответа, всё это и проделал. Сначала Implodom потом RegExom потом Explodom. А потом взгляд наткнулся на array_unique и сердце возликовало...

Но всё равно спасибо!
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...