Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  10 513
Jeg nerdet og ircet så fornøyd her også spør en fyr meg på irc om hvordan han kan få dette til å virke:

Kode

$template = "<h1>%foobar%</h1><p>Barfoofu!</p>";
$text = array("foobar" => "FU!");
$content = preg_replace("/\%([A-Z]*)\%/i", $text[(string) "\\1"], $template);
Formelt sett er jo det helt korrekt. Men preg_replace fungerer jo bare ikke slik. Det virker rett og slett ikke. Noen forslag?
Må ikke REGEXP være inne i '' innenfor "" ???

Slik: "'/%([A-Z]*)%/i'"
og: "\1" skrives: "\\1"
Nub!
TipeX's Avatar
Trådstarter
Regular expressions må ikke være i ' innenfor " nei.

Hanyways, det virker ikke. Prøvd ett utall mulige løsninger på det nå, finner ingenting som virker. Prøvd med både \\1, ${1} med og uten type casting, og med "e" modifier til regexpen. Det virker rett og slett bare ikke :/

PS! Jeg har skrevet \\1, men forumet er teit.
denne bør kanskje funke?

$content = preg_replace("/%([A-Z][a-z]*)%/i", $text[ "'\\1'" ], $template);
Hva med:

Kode

foreach(array_keys($text) as $key) {
        $text["/%".$key."%/i"] = $text[$key];
        unset($text[$key]);
}

$content = preg_replace(array_keys($text),array_values($text),$content);
Hmm... det funker med tall:

Kode

$string = "<h1>%1%</h1><p>Barfoofu!</p>";
$days=array(
	1 => "Who wants yesterdays papers?!?",
	"Who Wants Yesterdays news?",
	"Nobody",
	"In this world!",
	"Who wants yesterdays papers?!?",
	"Who Wants Yesterdays news?",
	"Nobody",
	"In this world!",
); 
print preg_replace("/%([0-9]+)%/e","\$days['\\1']",$string);
og endelig med bokstaver:

Kode

<?
$string = "<h1>%bar%</h1><p>Barfoofu!</p>";
$days=array( 'foo' => "Who Wants yesterdays papers?",
	'bar' => "Who wants yesterdays news?",
	"Nobody",
	"In this world",
	"Who Wants yesterdays papers?",
	"Who wants yesterdays news?",
	"Nobody",
	"In this world",
	"Who Wants yesterdays papers?",
	"Who wants yesterdays news?",
	"Nobody",
	"In this world",
	"Who Wants yesterdays papers?",
	"Who wants yesterdays news?",
	"Nobody",
	"In this world",
	"Who Wants yesterdays papers?",
	"Who wants yesterdays news?",
	"Nobody",
	"In this world"
);
print preg_replace( "/%([a-z]+)%/e", "\$days['\\1']", $string );
?>
Sist endret av fxxked; 13. desember 2003 kl. 01:31.

Kode

$template = "<h1>%foobar%</h1><p>Barfoofu!</p>";
$text = array("foobar" => "FU!");
preg_match_all("/%(.*?)%/i", $template, $content);

foreach($content[1] as $var)
  $return =  str_replace("%" . $var . "%", $text[$var], $template);
  
echo $return;
([a-z]+) burde kanskje endres til ([a-zA-Z0-9]+)
eller med callback, da ser det ut til å funke fint:

Kode

$template = "<h1>%foobar%</h1><p>Barfoofu!</p>";
$text = array("foobar" => "FU!");

function buff($string) {
 global $text;
 return $text[$string[1]];
}

$content = preg_replace_callback("/%([A-Z]*)%/i", buff, $template);
Problemet har hele tiden vært:

[A-Z]

den skulle vært
[A-Za-z0-9]

evt bare
[a-z]

Den funker ikke med * her, men den med + funker slik: [A-Za-z0-9]+
Nub!
TipeX's Avatar
Trådstarter
fxxked's siste løsning funker fint. Takker