[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: preg doesnt match
Nuzhser
Здравствуйте! Есть некий адрес. Мне нужно чтоб выделенная фиолетовым цифра уменьшалась на единицу в цикле. Написал прег риплейс но видимо шаблон кривой ничего не находит. $aw = -1




$frc = "http://imissit/yep/2010333_187.html";
do{
$pt='/([\w\d\.\/\:\/\/]*)_(\d+)(\.html)/is';
$aw = ${2}-1;
echo $aw;
$repl="$1$aw$3";
echo $repl;
$loc=preg_replace($patt, $repl, $frc);
echo $loc;}
while($aw>0);


Как строить?

Парсер матерится слудующим образом
Notice: Undefined variable: 2 in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\marketsite\sho.php on line 5
-1$1-1$3
Notice: Undefined variable: patt in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\marketsite\sho.php on line 9

Warning: preg_replace() [function.preg-replace]: Empty regular expression in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\marketsite\sho.php on line 9



Спустя 32 минуты, 14 секунд (4.07.2010 - 10:48) Rand написал(а):
Если честно, не очень понял, что ты понаписал, но обрати внимание на то, что
шаблон ты пишешь в переменной $pt, а в preg_replace у тебя $patt

Спустя 4 минуты, 50 секунд (4.07.2010 - 10:53) Nuzhser написал(а):
Очень сильно извиняюсь действительно втыкнул
Подправил $patt и все равно дает ошибку
Notice: Undefined variable: 2 in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\marketsite\sho.php on line 5
-1$1-1$3http://imissit/yep/2010333-1.html


Спустя 9 минут, 26 секунд (4.07.2010 - 11:02) tomash написал(а):
$aw = ${2}-1; 
что это за конструкция?
нужно вот так
$aw--;

Спустя 2 минуты, 22 секунды (4.07.2010 - 11:05) Rand написал(а):
А вот это что такое?
$aw = ${2}-1;
$repl="$1$aw$3";

Во первых, ты ничего кроме присвоения переменной текста выражения, ещё не сделал. Во вторых, в PHP нельзя так обращаться к результату - $1

Спустя 2 минуты, 52 секунды (4.07.2010 - 11:08) Nuzhser написал(а):
Так тем болле не хочет работать

$frc = "http://imissit/yep/2010333_187.html";
do{
$patt='/([\w\d\.\/\:\/\/]*)_(\d+)(\.html)/is';

$repl="$1$2--$3";
echo $repl;
$loc=preg_replace($patt, $repl, $frc);
echo $loc;}
while($2>0);



Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\marketsite\sho.php on line 10

Спустя 19 минут, 54 секунды (4.07.2010 - 11:28) Rand написал(а):
Ты не правильно работаешь с регулярными выражениями в PHP, читай мануал по функциям preg_*. Вот так было бы правильно:
<?
$frc = "http://imissit/yep/2010333_187.html";
$pt='/([\w\d\.\/\:\/\/]*)_(\d+)(\.html)/is';
preg_match($pt, $frc, $r);
while($r[2]>1) {
$frc=$r[1]."_".--$r[2].$r[3];
echo $frc."<br>";
}
?>

Спустя 8 минут, 10 секунд (4.07.2010 - 11:36) tomash написал(а):
$frc = "http://imissit/yep/2010333_187.html";
preg_match("/^(?:[\w\d\.\/\:\/\/]*)_(\d+)(?:\.html)$/is", $frc, $match);
while($match[1]>0)
{
$frc = str_replace('_'.$match[1].'.html', '_'.(--$match[1]).'.html', $frc);
echo "$frc<br>";
}


Rand
Блин, то же самое хотел сказать

Спустя 2 минуты, 8 секунд (4.07.2010 - 11:38) Nuzhser написал(а):
Признаю все работает это через прег матч. А я пробовал через прег реплейс и в мануале пишет

<?php
$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string);
?>


Я читал по регах доки и там было написано что в переменную $1 записывается первое совпадение и тд.
Например вот такой скрипт он же работае по выявлению линков в тексте
$text= preg_replace("/(^|[\n ])([\w]*?)((ht|f)tp(s)?:\/\/[\w]+[^ \,\"\n\r\t<]*)/is", "$1$2<a href=\"$3\" >$3</a>", $text);
И по аналоги я думал создать свой реплейс.

Спасибо за солюшн.

Спустя 3 минуты, 1 секунда (4.07.2010 - 11:41) Nuzhser написал(а):
Еще раз спасибо оба примера работоспособные.
Жаль шо не сам решил sad.gif

Спустя 10 секунд (4.07.2010 - 11:41) tomash написал(а):
Nuzhser
Можно и через прег реплейс, если не жаль ресурсов! Регулярки в цикле не самое лучшее решение

Спустя 1 час, 38 минут, 43 секунды (4.07.2010 - 13:20) Ineed$ написал(а):
Придумал ехая в метро, так что за работоспособность не ручаюсь, но по идее, как то так
preg_replace('#(http:\/\/[\w\d]{.*?})_([\d]{.*?})#','$1($2+1)',$str);

Спустя 12 минут, 41 секунда (4.07.2010 - 13:33) Nuzhser написал(а):
если еще едешь думай дальше а то результат на выходе такой же шо и на входе
$frc = "http://imissit/yep/2010333_187.html";
preg_replace('#(http:\/\/[\w\d]{.*?})_([\d]{.*?})#','$1($2+1)',$frc)

;
echo $frc;
и получаю

http://imissit/yep/2010333_187.html

а мне вооще то надо бы http://imissit/yep/2010333_186.html


//Да здравствует самый дешевый в мире транспорт(а может и не самый)

Спустя 1 час, 11 минут, 26 секунд (4.07.2010 - 14:44) Ineed$ написал(а):
а самому доделать слабо?

Спустя 5 часов, 53 минуты, 2 секунды (4.07.2010 - 20:37) Ineed$ написал(а):
исправил
$string = "http://imissit/yep/2010333_187.html";
$string = preg_replace_callback('#(.*?_)(.*?).html#i', 'ndec', $string);

function ndec($matches)
{
return $matches[1] . (--$matches[2]) . '.html';
}
а если у тебя пхп5.3 и выше тогда можно сделать так
$string = "http://imissit/yep/2010333_187.html";
$string = preg_replace_callback(
'#(.*?_)(.*?)(.html)#i',
create_function('$matches', 'return $matches[1] . (--$matches[2]).html;'),
$string
);
к сожалению у меня его нема и потому проверить возможности не было, но по идее должно работать.

Спустя 1 час, 32 минуты, 31 секунда (4.07.2010 - 22:09) Nuzhser написал(а):
Первый работает. Второй нет
Notice: Use of undefined constant html - assumed 'html' in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\marketsite\sho.php(29) : runtime-created function on line 1
http://imissit/yep/2010333_186html
у меня пхп 5.3.1

Спустя 15 минут, 50 секунд (4.07.2010 - 22:25) Ineed$ написал(а):
тогда так
$string = "http://imissit/yep/2010333_187.html";
$string = preg_replace_callback(
'#(.*?_)(.*?)(.html)#i',
create_function('$matches', 'return $matches[1] . (--$matches[2]) . matches[3];'),
$string
);
подстраивай под свои нужды. удачи!

Спустя 28 минут, 6 секунд (4.07.2010 - 22:53) Nuzhser написал(а):
Спасибо smile.gif


_____________
Лэт ит би
Быстрый ответ:

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