[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не могу разобраться. preg_replace
slava_1921
Дано:
Строка вида: A_abc123.rar<br>какой-нибудь текст<br>A_abc124.rar
Массив FILES вида: abc123.rar => '830 kb', abc124.rar => '150 kb';

Первым делом регулярным получаю имена файлов, т.е abc123.rar, и.т.д. с этим все нормально. Нужна заменить abc123.rar на содержимое элемента массива под соответствующим ключом.

Делаю так:
$text = preg_replace('/A_(.*)/', $myarray['$1'], $text);

Не заменяется. Пусто.
Помогите, в чем проблема? sad.gif



Спустя 15 дней, 23 часа, 40 минут, 14 секунд (9.05.2010 - 22:05) mad/crs написал(а):
По идее для такой задачи лучше использовать str_replace.(незачем регулярки напрягать в таком простом случае). Вот рабочий пример, надеюсь ещё неопоздал с ответом:
<?php

if(isset($_POST['string']))
{
$string=$_POST['string'];
echo "Оригинал строки: $string<br>";
$myarray=array(
'123.rar'=>'840Kb',
'4578.rar'=>'1024Kb');
//используем для подмены preg_replace
$result=preg_replace('@A_(\w+\.rar)@e', '$myarray[\'$1\']', $string);
echo 'Результат preg_replace: '.$result.'<br>';
//используем для подмены str_replace
foreach(array_keys($myarray) as $k)$keys[]='A_'.$k;
$result=str_replace($keys,array_values($myarray),$string);
echo 'Результат str_replace: '.$result.'<br>';
}
$action=$_SERVER['PHP_SELF'];
echo <<<CRS
<form method="post" action="$action">
<input type="text" name="string"/>
</form>

CRS;


для str_replace конечно-же приходится немного поменять ключи, но если будете
ключи хранить в виде 123.rar а не A_123.rar, то можно будет и не делать изменений а прямо ставить array_keys($myarray) вместо $keys

Спустя 29 дней, 22 часа, 4 минуты, 9 секунд (9.06.2010 - 20:09) Dron19 написал(а):
Ну вопервых если у тебя в $1 лежит название клюца, то в любом случаебудет ошибка,потому что нельзя создавать переменные начиная с цифр

Спустя 2 дня, 3 часа, 30 минут, 46 секунд (11.06.2010 - 23:40) anacondus написал(а):
И мне можно вопрос по этой теме.

мне нужно распарсить лог в базу

May14 18:01:21 d10 pppd[13586]: Connect: ppp237 <--> eth2.173

вот его строка

по пробелу разбила

$day_start получилось May14

$month_parse = preg_replace('/(\d+)/','',$day_start); //это месяц

а как день ???

Спустя 7 дней, 18 часов, 36 минут, 15 секунд (19.06.2010 - 18:16) gzim9x написал(а):
Цитата
И мне можно вопрос по этой теме.

мне нужно распарсить лог в базу

May14 18:01:21 d10 pppd[13586]: Connect: ppp237 <--> eth2.173

вот его строка

по пробелу разбила

$day_start получилось May14

$month_parse = preg_replace('/(\d+)/','',$day_start); //это месяц

а как день ???


preg_replace не к месту...


$txt='May14 18:01:21 d10 pppd[13586]: Connect: ppp237 <--> eth2.173';

preg_match('/(\D+)(\d+)/',$txt,$match);

в $match[1] - месяц
в $match[2] - день





Спустя 12 минут, 18 секунд (19.06.2010 - 18:28) gzim9x написал(а):
Цитата
Не заменяется. Пусто.
Помогите, в чем проблема? 


Для таких "продвинутых замен" preg_replace не подходит -- если уж очень хотите использовать регулярку -- ближе всего вам по вашему алгоритму подойдет preg_replace_callback + нужно добавить функцию которая обработает ваш вызов либо создать ее через create_function()


Спустя 20 часов, 3 минуты, 21 секунда (20.06.2010 - 14:32) anacondus написал(а):
Спасибо. Разобралась все получилось. :cool:
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.