Строка вида: 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);
Не заменяется. Пусто.
Помогите, в чем проблема?
Спустя 15 дней, 23 часа, 40 минут, 14 секунд (9.05.2010 - 22:05) mad/crs написал(а):
По идее для такой задачи лучше использовать str_replace.(незачем регулярки напрягать в таком простом случае). Вот рабочий пример, надеюсь ещё неопоздал с ответом:
для str_replace конечно-же приходится немного поменять ключи, но если будете
ключи хранить в виде 123.rar а не A_123.rar, то можно будет и не делать изменений а прямо ставить array_keys($myarray) вместо $keys
<?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); //это месяц
а как день ???
мне нужно распарсить лог в базу
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: