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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запарсить переменную в текстовой строке, ...после замены регами... 
:(
    Опции темы
-=Ustas=-
Дата 4.10.2005, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



Здрасте. Даже и не знал, как назвать топик. В общем, ситуация такая, есть некоторый текст в переменной, в которой присутствует некие дескрипторы типа &(var); &(var2) . Вот. Я выполняю замену в строке на переменную, но она своего значения не принимает. Как это можно решить?
Пример таков:
Код

<?php

// Значения, на которые должна быть замена
$var  = "|Значение переменной var|";
$var2 = "|Значение переменной var2|";

// Собсна сама строка с этими дескрипторами
$string = "ТекстТекстТе&(var);кстТекстТе&(var2);кстТекст";

// Делаем замену
$string = preg_replace("/&\((.*?)\);/i", " $\\1 ", $string);

// Выводим, но вывод имеет вид:
// ТекстТекстТе $var кстТекстТе $var2 кстТекст
echo $string;

?>

Т.е. строка выводится с неотпарсенными переменными - "ТекстТекстТе $var кстТекстТе $var2 кстТекст" , или я что не так делаю?

Это сообщение отредактировал(а) -=Ustas=- - 4.10.2005, 18:49


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
-=Ustas=-
Дата 5.10.2005, 06:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



Ну что... никто что ли???


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Darhazer
Дата 5.10.2005, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

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



А нельзя ли сделат так:

Код

<?php
// Значения, на которые должна быть замена
$VarArray = Array(
    'var'=>"|Значение переменной var|",
    'var2' => "|Значение переменной var2|"
);
// Собсна сама строка с этими дескрипторами
$string = "ТекстТекстТе&(var);кстТекстТе&(var2);кстТекст";
// Делаем замену
foreach ($VarArray as $key=>$val){
$string = str_replace("&(".$key.")", $val, $string);
}
// Выводим, но вывод имеет вид:
// ТекстТекстТе $var кстТекстТе $var2 кстТекст
echo $string;
?>


Это сообщение отредактировал(а) Darhazer - 5.10.2005, 10:33


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
MuToGeN
Дата 5.10.2005, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


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

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



Код
preg_match_all("/&\((.*?)\);/i",$string,$regs);
foreach($regs[1] as $varName){
    $string=str_replace("&($varName);",$$varName,$string);
}



--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
-=Ustas=-
Дата 5.10.2005, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



Я уже вот так решил эту задачу:
Код

$string = preg_replace_callback('/&\((\w+)\);/', create_function('$m', 'return $GLOBALS[$m[1]];'), $string);

Теперь осталось только выяснить, какой вариант работает быстрее. smile


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Mal Hack
Дата 5.10.2005, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Все проще:
Код

<?php
// Значения, на которые должна быть замена
$var  = "|Значение переменной var|";
$var2 = "|Значение переменной var2|";
// Собсна сама строка с этими дескрипторами
$string = "ТекстТекстТе&(var);кстТекстТе&(var2);кстТекст";
// Делаем замену
$string = preg_replace("/&\((.*?)\);/ieS", " $\\1 ", $string);
// Выводим, но вывод имеет вид:
// ТекстТекстТе $var кстТекстТе $var2 кстТекст
echo $string;
?>

PM ICQ   Вверх
-=Ustas=-
Дата 6.10.2005, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



Mal Hack, пасибки! Это действительно проще... И всем остальным тоже!


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0488 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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