Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] preg_replace i $2
Forum PHP.pl > Forum > PHP
CyklOP
Siedzialem juz dosyc dlugo i nie mam pomyslu, a rozwiazanie najprawdopodobniej jest proste...

[php:1:df22820218]<?php
//tutaj moj kod ktory chce przeszukac w poszukiwaniu znacznikow [kod] [/kod]
$code='[cokolwiek przed][kod] echo("a"); [/kod][cokolwiek po][kod] $b=$a+$b; [/kod]';

// fragment wyszukujacy znaczniki i wykonujacy funkcje 'kod' na fragmencie pomiedzy znacznikami
echo(preg_replace("![kod](.*)[/kod]!U",kod('$2'),$code));

?>[/php:1:df22820218]

Funkcja w pierwszej postaci, zwracajaca bzdurny wynik:

[cokolwiek przed]
<? $2 ?>
[cokolwiek po]
<? $2 ?>

[php:1:df22820218]<?php

function kod($kod)
{
$kod="<br />".highlight_string("<? $kod ?>",1)."<br />";
return($kod);
}

?>[/php:1:df22820218]

funkcja w drugiej postaci:

[php:1:df22820218]<?php

function kod($kod)
{
$kod="<br />".highlight_string("$kod",1)."<br />";
return($kod);
}

?>[/php:1:df22820218]

Druga funkcja (usunalem w niej znaczniki <? i ?>) wyswietla $2 tak jak powinna:

[cokolwiek przed]
<? echo("a"); ?>
[cokolwiek po]
<? $b=$a+$b; ?>

... ale za to nie koloruje. Nie wiem jak temu zaradzic, skonczyly mi sie pomysly...
Cudi
Użyj funkcji [manual:beed115356]preg_replace_callback[/manual:beed115356]
adwol
Zamień:
[php:1:35c9ab48bc]<?php
kod('$2');
?>[/php:1:35c9ab48bc]
na:
[php:1:35c9ab48bc]<?php
kod('2');
?>[/php:1:35c9ab48bc]
W tym miejscu PCRE różni się od natywnego perla. winksmiley.jpg
CyklOP
Rozwiazaniem bylo "preg_replace_callback", a poprawka adwola cos nie dziala (wyswietla sie kwadrat albo pisze ze niedozwolony znak "" ;p). Wielkie dzieki i wesolych swiat zycze smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.