Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Podmiana stringa poza fragmentem (preg???)
Forum PHP.pl > Forum > PHP
quetra
Witam..
Z gory blagam o wybaczenie - to moj debiut na php.pl smile.gif
posiadam takie cos:


[php:1:25b901fd14]<?php
$string='fs20';

?>[/php:1:25b901fd14]
musze zamienic wszystko poza liczba czyli np:
'fs' ==> '<font size=' a po '20' ma byc '<';
Pewnie czebaby na preg_replace z tym, ze mam klopoty z tymi nieszczesnymi wyrazeniami... smile.gif

mam nadzieje, ze w miare jasno sie wyrazilem. nie wiedomo jak dluga jest liczba po fs ( moze miec 1, 2, 3 lub 4 znaki). Nie wiadomo co moze byc po tel liczbie ( spacja, albo inny tag, albo nawet taki sam oddzielony spacją).
Uff.. z gory dziekuje.....
rmn
[php:1:14e0be72c1]<?php

$string='fs20'; //twoj poczatkowy 'znacznik'

$value=substr($string, 3); /*tak mozesz odczytac wartosc przekazywana przez ten 'znacznik' i potem wstawic ja do dowolnego stringa*/

$tag = substr($string, 1,2); //tak dsotajesz sam kod 'taga' (czyli w tym wypadk 'fs'

/*teraz wystarczy zrobic switacha ktory w zaleznosci od wartosc $tag genereuje odpowiedni znacznik html wykorzystujac wartosc $value
zamiast switcha mozesz tez zrobic tablice z tagami*/

$tags_list['fs'] ="<font size='";

//i potem msaz cos takiego:
$html = $tags_list[$tag].$value."'>";

?>[/php:1:14e0be72c1]

najlepiej zrób sobie funkcje z nagłowkiem typu

function Transorm($tag)
{
...

return $html;
}

ps. zamiast atrybutów htmlowskich typu font itd staraj sie używac css:)
polecam tez lekture dokumentacji na http://php.net smile.gif


aha poczególne tagi ze stringa który zawiera ich wiele mozesz otrzymac za pomoca explode - przeycztaj dokumentacje:

http://pl.php.net/manual/en/function.explode.php
quetra
Ano dziala jak mi sie wydaje calkiem dobrze biggrin.gif a ja glupek na regexpach chcialem to ladowac.
Robie parser do RTF'a, bo nie chce pisac mi sie CMS'a.

Lenia jakiegos podlapalem.... biggrin.gif

Dzieki i pozdrawiam.
quetra
No i sie pospieszylem za bardzo z ta radoscia... bo to dziala oki, ale kiedy mam taga odseparowanego, ale on przewaznie jest sobie w postaci:

costamcostamfs20znowu costami costamfs40 siala baba mak

O! I teraz chce je podmienic odpowiednio na
<font size="20"> i <font size="40">

No mam nadzieje, ze rozwialem wszelakie watpliwosci biggrin.gif

Pozdrowka dzieki z gory za pomoc.....
rmn
tak jak napisalem powiedzmy ze masz juz funkcje:)
[php:1:47dc5a3606]<?php


$tags_list['fs'] ="<font size='"; /*tutaj inicjalizujesz sobie tablice zawierajaca liste znacznikow i to na co chesz je zamienic. Lepiej zrobic to poza funkcja. W ten spoob tablica bedzie inicjalizowana tylko raz a nie za kazdym wywołaniem funkcji:)*/

function Transform($tag,$tags_list)
{


$value=substr($string, 3);

$tag = substr($string, 1,2);


$html = $tags_list[$tag].$value."'>";

return $html;
}

/*Teraz wystarczy podzielic twoj string zawierajacy wiele tagów na poszczególne znaczniki i dla kazdego z nich odpalic fucnkje. Mozesz to zrobic za pomoca expolde i petli while. Moge Ci napisac jak to ma wygladac tylko podaj mi prosze jakis przykladowy ciag zawierajacy wiele znacznikow:)

mozliwe ze bedzie to tak:
zalozmy ze kazdy znacznik jest odseparowany od reszty przez '/'
i ze nasz string jest zapisany w zmiennej $stirng*/

$rs_tags = explode("/", $string);

$i=0;
while( isset($rs_tasg[$i]))
{

$tag = $rs_tags[$i];

$temp = explode(" ", $tag);//pozbywasz sie tego co jest po wartosci liczbowej
$tag = $temp[0];

$htmlTags[$i] = Transform($tag);

$i++;
}

//otrzymujesz tablice htmlTags ktora zawiera znaczniki htmlowksie
?>[/php:1:47dc5a3606]

Ps nadal nie dokonca wiem o co chodzi:)
Tzn czy w $string sa tylko znaczniki czy tam tez jest tresc?
quetra
Uff. cholera chyba jakas zacme umyslu mam dzisiaj biggrin.gif
Jest prawie oki... troszke z tym walcze.

Mecze wiec dalej biggrin.gif


Taki string prosto z pliku RTF:

viewkind4uc1pardf0fs20 Sieje baba 667fs144 66akf1par

mam te znaczniki ( tutaj aqrat fs20 i fs144 ).

No i teraz poprostu zeby zamiast nich bylo to:
<font size="20">
<font size="144">

czyli:

viewkind4uc1pardf0<font size="20"> Sieje baba 667<font size="144"> 66akf1par

Ufff.
i tak chcialbym analogicznie do innych znacznikow.
niech podmieni znacznik (kazdy zaczyna sie "", zostawia liczbe i zamika ta liczbe znakiem ">".
Tu jest dla mnie najwiekszy problem, bo nie umiem zamknac cholerstwa po tej liczbie sad.gif ....


Dzieki za pomoc i pozdrawiam goraco.

P.S.
Wiem, ze maja myc style i ze 144 to absurd, ale nie o to mi chodzi teraz biggrin.gif
rmn
hmm jesli dobrze rozumieem:P

to cos takiego powinno byc tym czego szukasz:

[php:1:cf599e9834]<?php
/*deklarancja funkcji i tablicy ze znacznikami pozostaje bez zmian*/
$tags_list['fs'] ="<font size='"; //itd


function Transform($tag,$tags_list)
{

$value=substr($string, 3);

$tag = substr($string, 1,2);

$html = $tags_list[$tag].$value."'>";

return $html;
}


// a teraz robimy to co ostanio z tym ze ekektu naszej pracy uzywamy do wymienienia $taga ze stringa na gotowy kod html

$rs_tags = explode("/", $string);

$i=0;
while( isset($rs_tasg[$i]))
{

$tag = $rs_tags[$i];

$temp = explode(" ", $tag);//pozbywasz sie tego co jest po wartosci liczbowej
$tag = $temp[0];


$string = str_replace($tag,Transform($tag),$string);


}
//zamiast while mozesz uzyc foreach
?>[/php:1:cf599e9834]

powiedz ze o to chodzilo?smile.gif
dob
A może delikatnie szybciej?
[php:1:afbe373f51]<?php
$string='przykładowy kodzik fs144do wyświetlenia na stronie... przydał by sie znacznik zamykający co ?';
$nowy=ereg_replace("[fs]+([0-9]{1,4})", "<font size='1'>", $string);
echo $nowy;
?>[/php:1:afbe373f51]
rmn
fakt.. duzo szybciej i ladniej:)

dzieki za zwrocenie uwagi.
quetra
Hej!
Wlasnie o to mi chodzilo biggrin.gif wiedzialem, ze trzeba jakos na regexpach to popelnic, ale nie mialem pojecia, jak zamknac o wszystko tym '>'.

Jednak czlek uczy sie cale zycie biggrin.gif

Dzieki za pomoc biggrin.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.