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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ссылки в регулярном выражение 
V
    Опции темы
gta4kv
Дата 5.8.2008, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Всем привет.

В общем задача вот в чем:
Код

preg_replace( '#lang{([a-zA-Z0-9\-_.]+)}#iU', bj::$lang[ '\\0' ], self::$full_page );

Тоесть мне надо что-бы все что находилось между фигурными скобками (lang{bla_bla}) заменялось содержимым из массива, с ключём \\0 (ну т.е все что он найдёт по регулярке).

В примере выше - ссылка конечно же не срабатывает. Как это можно правильно записать?

Это сообщение отредактировал(а) gta4kv - 5.8.2008, 22:00
PM MAIL   Вверх
Mal Hack
Дата 5.8.2008, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



gta4kv
1. Оптимальнее использовать preg_replace_callback http://ru2.php.net/manual/ru/function.preg...ce-callback.php
2. Наиболее рациональная и оптимальная регулярка:
Цитата

#lang\{(.+?)\}#

PM ICQ   Вверх
gta4kv
Дата 5.8.2008, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Mal Hack, чудно. Спасибо.

Добавлено через 36 секунд
[ + ] 

правда реализация выглядит как то подозрительно smile
PM MAIL   Вверх
sTa1kEr
Дата 5.8.2008, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



gta4kv, можно так же воспользоваться модификатором 'e'
Код

preg_replace( '#lang{([a-zA-Z0-9\-_.]+)}#ieU', 'bj::$lang[ "$0" ]', self::$full_page );


Это сообщение отредактировал(а) sTa1kEr - 5.8.2008, 23:01
PM MAIL   Вверх
Mal Hack
Дата 5.8.2008, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(gta4kv @  5.8.2008,  23:57 Найти цитируемый пост)
правда реализация выглядит как то подозрительно smile 

А что тебя смущает?

Цитата(sTa1kEr @  5.8.2008,  23:59 Найти цитируемый пост)
gta4kv, можно так же воспользоваться модификатором 'e'

В данном случае вообще нужно, но как мне кажется, с точки зрения теории компиляторов лучше сначала все собрать в массив, потом этот массив послать в функцию, и потом все пачкой заменить...
Хотя, надо тестировать, конечно.
PM ICQ   Вверх
gta4kv
Дата 5.8.2008, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Цитата

А что тебя смущает?

Да нет, просто непривычная реализация.
Я уже начинаю побаиваться кода который пишу smile
PM MAIL   Вверх
Mal Hack
Дата 5.8.2008, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(gta4kv @  6.8.2008,  00:17 Найти цитируемый пост)
Да нет, просто непривычная реализация.
Я уже начинаю побаиваться кода который пишу smile 

Небоись, конец мира не напишешь... Его уже давно один великий кодер написал...
PM ICQ   Вверх
gta4kv
Дата 5.8.2008, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Цитата(Mal Hack @ 5.8.2008,  23:44)
Цитата(gta4kv @  6.8.2008,  00:17 Найти цитируемый пост)
Да нет, просто непривычная реализация.
Я уже начинаю побаиваться кода который пишу smile 

Небоись, конец мира не напишешь... Его уже давно один великий кодер написал...

Конец мира не напишу, а конец себе дык вполне. И всем кто видит мои исходнеки =)))
PM MAIL   Вверх
Mal Hack
Дата 5.8.2008, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(gta4kv @  6.8.2008,  00:53 Найти цитируемый пост)
Конец мира не напишу, а конец себе дык вполне. И всем кто видит мои исходнеки =))) 

Ага, а в конце будет:
exit("process f**k world executed succesfuly. Alah acbar");
PM ICQ   Вверх
gta4kv
Дата 5.8.2008, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Цитата(Mal Hack @ 5.8.2008,  23:56)
Цитата(gta4kv @  6.8.2008,  00:53 Найти цитируемый пост)
Конец мира не напишу, а конец себе дык вполне. И всем кто видит мои исходнеки =))) 

Ага, а в конце будет:
exit("process f**k world executed succesfuly. Alah acbar");

Спасибо за идею smile)))

Это сообщение отредактировал(а) gta4kv - 6.8.2008, 00:00
PM MAIL   Вверх
skyboy
Дата 6.8.2008, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Mal Hack @  5.8.2008,  22:07 Найти цитируемый пост)
лучше сначала все собрать в массив, потом этот массив послать в функцию, и потом все пачкой заменить...

тем паче, что все возможные значения для замены у тебя есть(ключи массива bj::$lang). а функция str_replace вполне себе принимает аргументами два массива: для поиска и для замены
PM MAIL   Вверх
gta4kv
Дата 6.8.2008, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Цитата(skyboy @ 6.8.2008,  00:20)
для поиска и для замены

У меня как бы не в планах писать для поиска массив отдельно, 
а если использовать регулярку + str_replace что-бы выудить массив для поиска, то какой смысл?

Вот так вполне даже ничего работает:
Код

self::$full_page = preg_replace_callback ( 
            '#lang\{(.+?)\}#', 
            create_function( 
                '$matches',
                'return bj::$lang[$matches[1]];' 
            ), 
        self::$full_page );

smile

(хотя тут наверное актуальнее вопрос - "а что быстрее выполняется?")

Это сообщение отредактировал(а) gta4kv - 6.8.2008, 00:33
PM MAIL   Вверх
skyboy
Дата 6.8.2008, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(gta4kv @  5.8.2008,  23:31 Найти цитируемый пост)
а если использовать регулярку + str_replace что-бы выудить массив для поиска, то какой смысл?

кто тебе такое сказал?
Код

$toSearch= array();
foreach(bj::$lang as $key => $value)
 $toSearch[]= '{' . $key . '}';
self:$full_page= str_replace($toSearch, $bj::$lang, self::$full_page);

где тут регулярные выражения?
PM MAIL   Вверх
gta4kv
Дата 6.8.2008, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Сдаюсь smile

А у такого решения есть плюсы над тем кодом который я показал выше? 
PM MAIL   Вверх
skyboy
Дата 6.8.2008, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



в зависимости от версии РНР(степени оптимизированности механизма регулярных выражений) и от количества вхождений. может быть значительная разница в скорости. а может быть и совсем незначительная. в любом случае, стрелять из пушки по воробьям бессмысленно.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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