Autor Zpráva
Anonymní
Profil *
Zdravím všechny,
mám problém s pochopením funkce ereg_replace. potřeboval bych, aby mi s nalezeným patternem provedla nějakou úpravu, konkrétně např aby řetězec "[podrobnost]" nahradila obsahem $pole["podrobnost"].
tedy např. "Nápověda [detail]" změnila na "Nápověda nedostupná", pokud $pole["detail"] = "nedostupná";

Zkoušel jsem i jiné funkce, např.
$str = ereg_replace("pokus", strtoupper(//1), $test);

ale zdá se, že tudy cesta nevede.

Zná někdo lepší způsob vyhledání a nahrazení výrazu "[cosi]" za $pole["cosi"] ? mě napadá jen použítí strpos(), ale to mi přijde jako dost mrzácké.

Děkuji předem za nápovědu a dobré rady. Milan
k
Profil *
preg_replace("/[cosi]/i",$pole['cosi'],"Napoveda [cosi]");
peta
Profil
http://cz2.php.net/nazevfunkce
http://cz2.php.net/ereg_replace
je tam spousta prikladu

k
"/[cosi]/i"
ja myslel, ze [] se pouzivaji pro vycet znaku, cili reg vyraz je platny jen pro pismena c o s i
Anonymní
Profil *
Ahoj lidi,
předem děkuji za reakce, bohužel, asi jsem to nenapsal správně.
Hledám COKOLI v hranatých závorkách (nebo jiném označení, třeba kulatých, to je jedno), a výraz, který v závorkách naleznu, chci nahradit hodnotou z pole, jejiž klíč je shodný s nalezenou hodnotou. Přítom dopředu nevím, co v těch závorkách najdu. Čili s výrazem //1 bych rád spáchal nějakou funkci :

$rv = ereg_replace('\\[(.[^[]*)\\]',strtoupper(\\1),$string);

třeba strtoupper, to je fuk.

Milan
nightfish
Profil
Anonymní
trochu krkolomné, nicméně můžeš vyzkoušet:


<?php
$str = "neco [v hranatych] zavorkach [a dalsi] neco";
if (preg_match("/\[(.*)\]/sU",$str,$regs)) {
$str = str_replace("[".$regs[1]."]", strtoupper($regs[1]), $str);
echo $str;
}
?>


akorát bude potřeba to prohnat cyklem, který bude kontrolovat, zda-li jsou tam ještě nějaké hranaté závorky - tohle nahradí vždy jenom první výskyt...
Anonymní
Profil *
Zdravím,
Tak tohle asi bude nejrychlejší a nejelegantnější řešení ... děkuji za nápad. asi mi možnosti preg_match unikly :)
To je přesně to, co jsem hledal,
Milan
Lazaros
Profil *
Splodil jsem neco s tim cyklem, ale nevim jak moc to je pomaly


$str = "neco [v hranatych] zavorkach [a dalsi] neco";
preg_match_all("/\[(.*)\]/sU",$str,$regs, PREG_SET_ORDER);

foreach ($regs as $reg) {
$str = str_replace($reg[0], "=".$reg["1"]."=", $str);
}

echo $str;
nightfish
Profil
myslel jsem spíš něco ve stylu

$str = "neco [v hranatych] zavorkach [a dalsi] neco";


while (strpos($str,"[") !== false) {
if (preg_match("/\[(.*)\]/sU",$str,$regs)) {
$str = str_replace("[".$regs[1]."]", strtoupper($regs[1]), $str);
}
}
echo $str;
ServIT
Profil
Zdravíčko, ( no, registroval jsem se ...)
To poslední řešení se mi zdálo trochu podivné, ale lepší se asi napsat nedá ... dobrá práce, děkuji

trochu jsem to upravil ... nebude to blbnout ?


function get_real_string($string) {
while (preg_match("/\[(.*)\]/sU",$string,$regs)) {
$string = str_replace("[".$regs[1]."]", strtoupper($regs[1]), $string);
$regs = "";
}
return $string;
}


diky za pomoc, doufám, že se budu revanšovat v oblastech, které znám lépe.

Milan
Toto téma je uzamčeno. Odpověď nelze zaslat.

0