Autor Zpráva
sedgar
Profil *
Dobry den,

mam nasledujuci problem:
pomocou php chcem exportovat obsah mysql tabulky do textoveho suboru (nasledne importovat do excelu)
v mysql databaze mam stlpec "popis zadania", ktory obsahuje lubovolny text zadany uzivatelom - su v nom bezne pouzivane aj znaky ktore sluzia ako oddelovac,
ako oddelovac som zvolil tabulator - potrebujem teda nahradit/odstranit vsetky tabulatory a tu je problem...
zatial som skusal funkcie, vsetko neuspesne:

- chop($riadok1["zad_popis_riesenia"]);
- str_replace($fir2, $sec2, $riadok1["zad_popis_riesenia"]);
- str_ireplace($fir2, $sec2, $riadok1["zad_popis_riesenia"]);
- ereg_replace
- eregi_replace

Dik.
Kcko
Profil
preg_replace("~\s+~Usi", "",$place);
sedgar
Profil *
DIK!

IDE :-D

mohol by si pls kratky popis co to robi?
jj tomu ze v retazci v premennej $place nahradi "~\s+~Usi" za "" rozumiem (teda aspon myslim ze rozumiem), ale...
to predsa robia aj funkcie ktore som pouzil ja, alebo nie?, a co je vlastne toto? "~\s+~Usi"
Joker
Profil
sedgar
a co je vlastne toto? "~\s+~Usi"
Regulární výraz.
Znamená to "Jeden nebo víc bílých znaků", s modifikátory U (ten nevím co dělá), s (celý řetězec porovnává najednou, bez něj se porovnává po řádcích), i (bez ohledu na velikost písmen)
lordfrikk
Profil
Regulární výrazy (v tom případě konkrétně PCRE (Perl-compatible Regular Expressions)) se zapisují takto:

ODDĚLOVAČvýrazODDĚLOVAČmodifikátory


V tomto případě je jako oddělovač použita tilda (~). Takže mám ~výraz~. Dále - \s označuj skupinu znaků, v tomto případě jakýkoli bílý znak (vertiální i horizontální). Dále + je tzv. kvantifikátor, který říká, že znak předtím se očekává minimálně 1x, seshora není nijak omezen. Dále v uvedeném výrazu jsou až za oddělovači modifikátory, s a i jsou vysvětleny Jokerem, U (PCRE_UNGREEDY) znamená, že kvantifikátory nejsou "hladové"... nebudu to dále rozepisovat, protože pro pochopení "hladovosti" je třeba o regulárech něco vědět.
nightfish
Profil
vzhledem k použitému RV není potřeba modifikátory používat ((un)greedy nás nezajímá, protože to nahradí postupně všechny a case sensitive nás také nezajímá, protože mezery nejsou "velké" a "malé" a s ovlivňuje pouze vyhodnocování metaznaku tečka, který nepoužíváme)
takže
preg_replace("~\s+~", "", $place);


jinak k tomu U (a hladovosti) - RV standardně vybere nejdelší odpovídající část
tzn. mějme např. řetězec aaabbbbbca
RV b+ vybere čtyři po sobě následující znaky "b"
když přidáme modifikátor U, tak se vybere nejkratší shoda, což by u výše uvedeného řetězce/RV znamenalo jeden znak "b"

k čemu je to dobré? např. chcete vybrat z HTML textu nějakou konkrétní část
mějme kód: <div>prispevek 1</div><div>prispevek 2</div>
když použijeme RV <div>(.*)</div>, tak nám standardně vybere celý vnitřek mezi prvním <div> a posledním </div>, což obvykle nechceme
při použití modifikátoru U se nám vybere jen odpovídající text mezi prvním <div> a nejbližším </div>
lordfrikk
Profil
^ Nebo se nám vybere vnořený div ;)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0