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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> найти подстроку и вызвать функцию 
:(
    Опции темы
lumentek
Дата 16.10.2011, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



необходимо в строке найти подстроку {func=1} и вызвать функцию func(1); 
значение 1 может быть любое целое число. даже в голову не приходит как поступить. может использовать регулярное выражение?
PM MAIL   Вверх
$дмитрий
Дата 16.10.2011, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 17
Всего: 45



Цитата

найти подстроку {func=1}, может использовать регулярное выражение? 

Да. Черновой шаблон:
Код

#{(\w+)=(\d+)}#

Ну а потом call_user_func
PM MAIL   Вверх
lumentek
Дата 17.10.2011, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Дмитрий, не могли бы вы подробнее показать. Я с регулярными выражениями не очень, впрочем как с php. Был бы вам очень признателен, если бы показали бы более понтяный пример.
PM MAIL   Вверх
$дмитрий
Дата 17.10.2011, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 17
Всего: 45



Смотри, написал пример с комментариями!
Код

<?
// обьявляем пользовательскую функция с именем func
function func($sPar)
{
    echo $sPar;
}

// В этом тексте, по шаблону {(\w+)=(\d+)}, будем искать совпадения
$sText = 'Друзья мои, вам жаль поэта:
Во цвете радостных надежд,
Их не свершив еще для света,
Чуть из младенческих одежд,
Увял! Где жаркое волненье {func=123},
Где благородное стремленье
И чувств, и мыслей молодых,
Высоких, нежных, удалых?
Где бурные любви желанья,
И жажда знаний и труда,
И страх порока и стыда,
И вы {func=456}, заветные мечтанья,
Вы, призрак жизни неземной,
Вы, сны поэзии святой!';

// вызываем функцию поиска
preg_match_all("#{(\w+)=(\d+)}#", $sText, $arMath);
for($i=0; $i<count($arMath[0]); $i++)
{
    // $arMath[1][$i] здесь у нас имена функций которые мы нашли
    // $arMath[2][$i] а здесь аргументы  
    call_user_func($arMath[1][$i], $arMath[2][$i]);
}
?>

PM MAIL   Вверх
lumentek
Дата 17.10.2011, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо очень понятно. Но есть один момент, который не получилось реализовать. Дело в том что тут мне нужно проивзести замену. т.е. мне вместо {func=число} нужно было вставить другое текст, который формируется динамически на основе аргументов. Но проблема в том что если таких шаблонов псевдо-кодамного, то текст выдается более одного раза, причем в каждом случае замена своя.
PM MAIL   Вверх
$дмитрий
Дата 17.10.2011, 03:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 17
Всего: 45



Смотри, для замены шаблонов в тексте результатом пользовательской функции нужно вызвать preg_replace с callback'ом
Код

<?
function func($sPar)
{
    return 'test'.$sPar;
}

function callback($sFunction, $nPar)
{
    return call_user_func($sFunction, $nPar);
}

$sText = 'Друзья мои, вам жаль поэта:
Во цвете радостных надежд,
Их не свершив еще для света,
Чуть из младенческих одежд,
Увял! Где жаркое волненье {func=123},
Где благородное стремленье
И чувств, и мыслей молодых,
Высоких, нежных, удалых?
Где бурные любви желанья,
И жажда знаний и труда,
И страх порока и стыда,
И вы {func=456}, заветные мечтанья,
Вы, призрак жизни неземной,
Вы, сны поэзии святой!';

$sText = preg_replace("#{(\w+)=(\d+)}#e", "callback('\\1', '\\2')", $sText);
echo $sText;
?>

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.

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


 




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


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

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