Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Problem - zamiana w stringu/wyr. regularne/preg_X_Y() /inne... :)

4 views
Skip to first unread message

WRonX

unread,
Oct 29, 2009, 10:22:36 AM10/29/09
to
Czesc.

Jak w najprostszy sposob w tekscie zamienic string
<!-- ABCDE jakiespolecenie -->
na wynik funkcji
WykonajPolecenie('jakiespolecenie');

Zakladamy, ze 'ABCDE' to jakis identyfikator, ktory jest staly.


Jak na razie zrobilem to tak (normalnie 3 linijki, ale Thunderbird
lamie, wiec sformatowalem czytelniej):

if(preg_match_all('/<!-- ABCDE (?<jakiespolecenie>.*?) -->/',
$tekst,
$found))
foreach($found['jakiespolecenie'] AS $polecenie)
$tekst = str_replace('<!-- ABCDE ' . $polecenie . ' -->',
WykonajPolecenie($polecenie),
$tekst);

...ale wydaje mi sie, ze da sie jakos prosciej, prawda?
Tylko nie jestem w stanie poskladac tego w calosc :)
Podejrzewam ze za pomoca preg_replace_callback(), ale nie bylem w stanie
zlozyc tego w calosc na podstawie przykladow z php.net


Pozdrawiam.
--
[= WRonX =] [= WRonX@-CUT-WRonX.NET =] [= http://WRonX.NET =]
[= GCS/CC d->++ s+:- a- C++++$ U P>++ L+ !E W+++$ N++(+++) =]
[= !o-- K-? w++$ !O !M- !V-- PS+ PE !Y !PGP !t !5 X++ R++ =]
[= tv+ b+++ DI++ D+ G+ e+++ h--->---- r+++ y? =]

wojciech777

unread,
Oct 29, 2009, 6:48:06 PM10/29/09
to
> Jak w najprostszy sposob w tekscie zamienic string
> <!-- ABCDE jakiespolecenie -->


$result = preg_replace('/<!--\s+ABCDE\s+(\w+)\s+-->/m',
'WykonajPolecenie(\'$1\')', $subject);


--
Wys�ano z serwisu OnetNiusy: http://niusy.onet.pl

WRonX

unread,
Oct 30, 2009, 4:28:14 AM10/30/09
to
wojciech777 pisze:

>> Jak w najprostszy sposob w tekscie zamienic string
>> <!-- ABCDE jakiespolecenie -->
>
> $result = preg_replace('/<!--\s+ABCDE\s+(\w+)\s+-->/m',
> 'WykonajPolecenie(\'$1\')', $subject);

Na szybko, bo nie mam czasu tego sprawdzic - czy to nie zamieni mi tylko
znacznika na nazwe funkcji? Bo chcialbym, zeby zamienilo na wynik tej
funkcji.

alianora

unread,
Oct 30, 2009, 9:26:23 AM10/30/09
to
WRonX pisze:

> wojciech777 pisze:
>>> Jak w najprostszy sposob w tekscie zamienic string
>>> <!-- ABCDE jakiespolecenie -->
>>
>> $result = preg_replace('/<!--\s+ABCDE\s+(\w+)\s+-->/m',
>> 'WykonajPolecenie(\'$1\')', $subject);
>
> Na szybko, bo nie mam czasu tego sprawdzic - czy to nie zamieni mi tylko
> znacznika na nazwe funkcji? Bo chcialbym, zeby zamienilo na wynik tej
> funkcji.

Hint: preg_replace_callback

Pozdr.
mk

WRonX

unread,
Nov 3, 2009, 2:59:41 AM11/3/09
to
alianora pisze:

> Hint: preg_replace_callback

Ja wiem, ze powinienem schowac ogon pod siebie, bo to ja pytam, ale bez
przesady...
W pierwszym poscie zaznaczylem wyraznie, ze "Podejrzewam ze za pomoca

preg_replace_callback(), ale nie bylem w stanie zlozyc tego w calosc na

podstawie przykladow z php.net".

Po prostu - nie ogarniam jakos manuala w tym przypadku - wystepuja tam
niezrozumiale dla mnie wywolania funkcji i przekazywanie parametrow.

Nie jestem studentem, ktory potrzebuje tego na "na gwalt" na zaliczenie,
pokazalem, ze poradzilem sobie w inny sposob, a teraz prosilem, zeby mi
ktos powiedzial, jak to mozna uproscic. Bez hintow, za to moze byc za
pomoca przykladu :)

alianora

unread,
Nov 3, 2009, 3:58:10 AM11/3/09
to
WRonX pisze:

> alianora pisze:
>
>> Hint: preg_replace_callback
>
> Ja wiem, ze powinienem schowac ogon pod siebie, bo to ja pytam, ale bez
> przesady...
A gdzie tu jest coďż˝ o ogonie?

> W pierwszym poscie zaznaczylem wyraznie, ze "Podejrzewam ze za pomoca
> preg_replace_callback(), ale nie bylem w stanie zlozyc tego w calosc na
> podstawie przykladow z php.net".

Nie doczyta�em, moja wina...

>
> Po prostu - nie ogarniam jakos manuala w tym przypadku - wystepuja tam
> niezrozumiale dla mnie wywolania funkcji i przekazywanie parametrow.

To czego nie rozumiesz w tym (przyk�ad z php.net):
<?php
// this text was used in 2002
// we want to get this up to date for 2003
$text = "April fools day is 04/01/2002\n";
$text.= "Last christmas was 12/24/2001\n";
// the callback function
function next_year($matches)
{
// as usual: $matches[0] is the complete match
// $matches[1] the match for the first subpattern
// enclosed in '(...)' and so on
return $matches[1].($matches[2]+1);
}
echo preg_replace_callback(
"|(\d{2}/\d{2}/)(\d{4})|",
"next_year",
$text);

?>

>
> Nie jestem studentem, ktory potrzebuje tego na "na gwalt" na zaliczenie,
> pokazalem, ze poradzilem sobie w inny sposob, a teraz prosilem, zeby mi
> ktos powiedzial, jak to mozna uproscic. Bez hintow, za to moze byc za
> pomoca przykladu :)

Przyk�ady masz na php.net - wystarczy przeczyta�
http://pl2.php.net/preg_replace_callback razem z przyk�adami. Powy�sze
nale�y robi� tak d�ugo a� si� nie zatrybi.

Pozdr.
MK

0 new messages