Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   PHP (http://www.flasher.ru/forum/forumdisplay.php?f=20)
-   -   counters (http://www.flasher.ru/forum/showthread.php?t=34610)

Gandalf 17.07.2002 19:35

counters
 
hi ,
problemma takogo roda ..... ispol'zuu regular expressions (preg_replace();)
ix neskol'ko podrjad ......... 15-20
kak mne uznat' skol'ko raz VSEGO (t.e. vse oni vmeste) sdelali zameni ??????

t.e.
$code="asdqwefghzxcvbnrtyfghasdqwe";
$code=preg_replace("'asd'is","qwe",$code);
$code=preg_replace("'zxc'is","vbn",$code);
$code=preg_replace("'dfg'is","ert",$code);
$code=preg_replace("'yui'is","hjk",$code);
mna nado sdelt' ne bolle N kolichestva zamen , kak ??????!

reshenie kak
//
$s=array ("my regular");
$r=array("my replacment");
$code=preg_replace($s,$r,$code);
//
ne podxodit.!

kompadre 17.07.2002 22:18

Pochemu ne podhoidit? V smisle - ne furichit ili iz principa?

Potomu-chto vishenapisanoye preg ($array_patterns, $array_replaces, $input) dolzno rabotat...

Yesho mozno sdelat tak

<?
function reps ($_) {

$pats = array ("pat0", "pat1");
$reps = array ("rep0", "rep1");
$i = 0;

foreach ($patterns as $pat) {
$_ .= ereg_replace ($pat, $reps[$i++], $_);
}

return ($_);
}
?>

Gandalf 18.07.2002 00:06

лады ... , я просто плохо указал мою проблему !
масивы я могу использовать , то что я их не пользовал , дурак я .. :o

моя проблема такова, что мне надо проверить сколько раз произошла замена и если замена произошла больше чем N раз , то надо выдать ошибку , а не ограничить ........

так же по ходу дела , можно ли каким то способом вытащить преременные $1 $2 $3 .... из preg_replace(); ???
если писать
PHP код:

$var="string";
$var=preg_replace("'(string)'i","here $1",$var);
// замена произошла! теперь $var=="here string";
//но если я пробую использовать после переменую $1 то ничего хорошего не происходит ( ошибка) 


kompadre 18.07.2002 00:46

В таком случае ябы посоветовал тебе юзать preg_replace_callback (mixed pattern, mixed callback, mixed subject [, int limit);

Фишка вот в чем : вместо обыкновенного replac-a preg_replace_callback заменяетсвой стринг на то что возвращает функция [имя которой] ты пишеш во втором аргументе.

Получается следующие :
PHP код:

<?

$max 
5;
$counter 0;
$replaces = array ("strochka" => "string","nice" => "stupid");

$in "Here goes my strochka ... Very nice strochka. I want to replace my strochka. It will be a nicer strochka";
// Вызываем preg_replace_callback 
$out preg_replace_callback ("(strochka|nice)""callback_function"$in);

/*
preg_replace_callback в свою очередь вызывает функцию callback_function которую ты заранее определил.
*/

function callback_function ($matches) {
global 
$counter$max$replaces$in;
    if (
$counter $max) {
        
// То что должно случится когда количество совпадений перевалило за макксимум. Например : $exit = true; и (!!!) , 
        // всю твою строку приравниваешь ошибке. 
        
$in "Eror !?!";
        
$error true;
    }
    
$counter++;
    
// На худой конец
    
if ($error) return "";
    
// Для нормальной расклаки
    
return ($replaces[$matches[0]]);
}

echo 
$out;

?>


kompadre 18.07.2002 00:51

ЗЫ

Не сомневаюсь что все можно сделать легче.

Gandalf 18.07.2002 01:00

посиб , идея понята :)

juggy 18.07.2002 01:04

Простите! п почему сначала оба писали на транслите, а потом на русском?

Gandalf 18.07.2002 01:20

шифровались :D :D :D

ЗЫ : я сидел за компом без кирилики :(

kompadre 18.07.2002 01:22

А мне в лом было клаввиши "нащупывать" на испанской клаве. А потом я вспомнил как приятно читать мессаги на кирилице. :)


Часовой пояс GMT +4, время: 10:29.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.