- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Как удалить плохие SEO-ссылки и очистить ссылочную массу сайта
Применяем отклонение ссылок
Сервис Rookee
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Люди! Изучаю реги. Возник вопрос.
Вот к примеру есть строка:
"Привет Марина, Привет Марина, Привет Марина, Привет Марина"
Как используя регулярное выражение заменить второе слово "Привет" на "Здравствуй"
Так меняет глобально (все четыре привета заменяет):
Вообще, как заставить ф-ю preg_replace заменять не все совпадения, а лишь какое-то определенное?
Да никак(или я что-то в этой жизни проспал), если конечно явно не указать.
preg_replace ('/12,12,12,12/', '12,34,12,12', $text);
Не, я точно знаю, что алгоритм какой-то есть.
Видел прогу, которая к примеру может заменить все четные совпадения или все нечетные, или какие-то начиная с какого-то номера.
Может, правда, это не через preg_replace делается, а как-то через другую ф-ю, но что такое есть, я знаю. Хотелось бы узнать хоть какое-нибудь глобальное решение.... =)
Для PERL же есть =) ( http://www.opennet.ru/base/dev/perl_regexp_n.txt.html )
Значит для php тоже должно быть.
Вообще, как заставить ф-ю preg_replace заменять не все совпадения, а лишь какое-то определенное?
djdiplomat, принципиально именно preg_replace?
А разбить при помощи preg_match, заменить нужный и потом склеить - не?
Первое
Конкретно "второе" вхождение в данном случае можно заменить так:
p.s. при помощи preg_replace_callback "что угодно" можно сделать..
Ну там тоже явное указание: первый и второй номер не меняем, а третий заменяем на 9-9999.
djdiplomat, принципиально именно preg_replace?
А разбить при помощи preg_match, заменить нужный и потом склеить - не?
p.s. при помощи preg_replace_callback "что угодно" можно сделать..
Не. ну а если у меня к примеру 10 000 слов. В которых порядка 150 одинаковых и мне нужно заменить к примеру с 20-50 и далее через один. Склейка мне явно не катит...
Комп заманается резать и клеить
PS а можно расшифровать эту запись:
$text = preg_replace ('/(.)Привет/','\1Здравствуй',$text,1);
Я как понял.
/(.)Привет/ - поиск "привет" у которого впереди любой знак
\1Здравствуй - вот тут я не вкурил в экранированную единичку. Это указатель на элемент массива? (типа цифра 1 - значит 2-й элемент т.к у массива все начинается с 0) ?
И после запятой ext,1); - это что за зверь? (количество подряд идущих замен?)
Для PERL же есть =) ( http://www.opennet.ru/base/dev/perl_regexp_n.txt.html )
движок регулярных выражений практически идентичный за некоторыми исключениями, а это значит и в пхп вы тоже можете использовать условия в регулярках. То, есть по смыслу это не должно отличаться от описанного в той статье для перла.
---------- Добавлено 01.04.2013 в 09:51 ----------
Комп заманается резать и клеить
меняйте комп, если с такими слабыми задачами не справляется :)
а это значит и в пхп вы тоже можете использовать условия в регулярках. То, есть по смыслу это не должно отличаться от описанного в той статье для перла.
не-не.. отличия есть... но тем не менее модификатор e (PREG_REPLACE_EVAL) работает и в PHP..
Не. ну а если у меня к примеру 10 000 слов. В которых порядка 150 одинаковых и мне нужно заменить к примеру с 20-50 и далее через один. Склейка мне явно не катит...
Да всё катит.. Если есть возможность, на больших объёмах вместо регулярок, я бы лучше "обычные" строковые (см str_replace) функции использовал.. На реальных 10к данных можете провести тесты и выложить результаты.. и по быстродействию, и по памяти..
---------- Post added 01-04-2013 at 11:10 ----------
И после запятой ext,1); - это что за зверь? (количество подряд идущих замен?)
Люди! Изучаю реги. Возник вопрос.
А изучение не подразумевает в ман заглянуть?
Список параметров ...
Вообще, как заставить ф-ю preg_replace заменять не все совпадения, а лишь какое-то определенное?
http://php.net/manual/ru/function.preg-replace.php
int $limit
http://php.net/manual/ru/function.preg-replace.php
int $limit
Это, если первые сколько-то нужно.. Не, можно конечно туда-сюда менять.. :)
модификатор e (PREG_REPLACE_EVAL) работает и в PHP..
Там, кстати, примечания есть для модификатора.. имеет смысл обратить внимание
Спасибо всем.
В ман я конечно, заглянул (просто изначально не внимательно прочел).
Правда, что-то пока в это дело
$text = preg_replace ('/Привет/ie',"\$counter++==1?'Здравствуй':'\\0'",$text);
(жирным пометил) не вкурил...