Autor Zpráva
Someone
Profil
Dobrý den, řekněme, že mám textový dokument, který obsahuje dny v týdnu (každý den je na vlastním řádku) a chci za každe slovo vložit tečku na jakou funkci se mám podívat abych toho dosáhl? Dá se to udělat jen jednou funkcí nebo jich budu muset použít víc?
Ugo
Profil
str_replace("\n",".\n",$obsah_souboru);
Darker
Profil
Asi bych v tomhle případě použil regulární výraz.
[a-zA-Z]+

Tedy:
$data=file_get_contents("dny.txt");
$data=preg_replace("~([a-zA-Zěščřžýáíéůú]+)~","$1.",$data);
echo file_put_contents("dny.txt", $data)?"Nahrazeno":"Chyba pri ukladani";


Someone
Profil
Když už jste to sem napsali chtěl bych se zeptat co je \n stále sem to nějak nepochopil. Jinak děkuji.
Ugo
Profil
taková rada, když můžeš pracuj se stringem a vyhni se reguláru, pokud máš opravdu pevnou strukturu toho souboru jak píšeš tak by to mohlo jít, s regulárem máš sice víc možností ale je neskutečně pomalej.

\n je "znak" pro zalomení řádku, existuje \n a \r jakej je mezi nima přesnej rozdíl sem nestudoval ale
Tori
Profil
Someone:
chtěl bych se zeptat co je \n
Kontrolní znak pro zalomení řádku. V různých oper.systémech se používá buď \n nebo \r nebo oba, podrobněji např. na wikipedii. V PHP můžete bezpečně použít konstantu PHP_EOL, tam je vždy znak/sekvence zalomení řádku pro ten konkrétní OS.
Someone
Profil
Chtěl bych se zeptat, co znamená
$data=preg_replace("~([a-zA-Zěščřžýáíéůú]+)~","$1.",$data);
Vypadá to jako proměnná 1, ale žádná taková tam není plus je v uvozovkách.
a co znamená tento regulérní výraz slovy. A konkrátně tento znak ~
~([a-zA-Zěščřžýáíéůú]+)~
Ugo
Profil
~ uvozuje regular, ma to nazev kterej se mi ted vykouril z hlavy (je to znak kterym zacina, konci a kdyz je uvnitr regularu tak se musi escapovat)
$1 je interni promenna toho preg replacu a znaci shodu s cislem jedna ( $0 je celej regular, $1 je podregular - to v zavorce ... tady je zavorka zbytecne)
Someone
Profil
Omluvám se, ale asi jsem nepochopil to

Ugo:
kdyz je uvnitr regularu tak se musi escapovat
Tori
Profil
Ugo:
tady je zavorka zbytecne
Ehm, asi jste to nezkusil, že?

Someone:
Regulární výraz má strukturu: [oddělovač] [výraz] [oddělovač] [modifikátory]. Oddělovač (delimiter) je libovolný znak, který ohraničuje regulár, tak jako např. řetězec je uzavřený do uvozovek nebo apostrofů. Pokud chcete uvnitř reguláru použít znak, který zároveň používáte jako oddělovač, musíte ho escapovat (stejně jako "uvozovky \" uvnitř řetězce"). Takže se většinou používají znaky jako lomítko, tilda, mřížka, apod., které se uvnitř reguláru nevyskytují. Dá se použít i funkce preg_quote.

Ad "$1": Na každou část reguláru, která je uzavřená v závorkách (subpattern), se dá odkazovat (= backreferences). Odkazy jsou buď ve tvaru $1, nebo \\1(je to jedno), přičemž $0 je to, co zachytil celý regulár, a $1 - $99 jsou kousky zachycené jednotlivými částmi reguláru v závorkách (koukněte do manuálu k preg_replace). Pokud chcete, aby se některé závorky vynechaly z toho číslování, místo (výraz) použijte (?:výraz). V manuálu je celá syntaxe regulárů dobře popsaná.
Someone
Profil
K čemu je dobré, že se v kulatých závorkách vyskytují závorky hranaté? -> ([...]) Podle toho co jsem četl to co je v kulatých závorkách musí být v řetězci všechno a to co je v hranatých závorkách musí být aspoň jedno s toho.. k čemu je dobré respektive co to udělá když jsou hranaté v kulatých?
Tori
Profil
Someone:
co to udělá když jsou hranaté v kulatých?
~Můj pes se jmenuje [A-Za-z]+\.~
~Můj pes se jmenuje ([A-Za-z]+)\.~
Tyhle dva reguláry najdou stejný text. Rozdíl je jen v tom, že u druhého reguláru zachytím nejen celou větu, ale i samostatně jméno toho psa. Když potřebujete najít nějaký kus řetězce, a zároveň najít i konkrétní část uvnitř toho nalezeného, tak si tu část označíte do závorek. Takže ve [#3] si Darker označil jednotlivá slova (část, která se skládá jen z těch uvedených písmen), a pak tu nalezenou část použil v druhém parametru (protože ji nechtěl měnit, jen za ni přidat tečku).
Možná to bude líp pochopitelné na zjednodušeném reguláru pro převod odkazů z bbCode do html:
// bbCode:  [link=http://example.com]Super stránka[/link]
preg_replace('~\[link=(.+)\](.+)\[/link\]~', '<a href="$1" title="$2">$2</a>', $text);
// výsledek: <a href="http://example.com" title="Super stránka">Super stránka</a>

Jinak k tomu původnímu problému - řešit toto regulárem je opravdu zbytečné, str_replace stačí.

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