Autor | Zpráva | ||
---|---|---|---|
Someone Profil |
#1 · Zasláno: 31. 10. 2011, 10:34:43
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 |
#2 · Zasláno: 31. 10. 2011, 10:42:27
str_replace("\n",".\n",$obsah_souboru);
|
||
Darker Profil |
#3 · Zasláno: 31. 10. 2011, 10:42:34
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 |
#4 · Zasláno: 31. 10. 2011, 10:45:26
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 |
#5 · Zasláno: 31. 10. 2011, 10:48:17
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 |
#6 · Zasláno: 31. 10. 2011, 10:53:52
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 |
#7 · Zasláno: 31. 10. 2011, 16:58:47 · Upravil/a: Someone
Chtěl bych se zeptat, co znamená
$data=preg_replace("~([a-zA-Zěščřžýáíéůú]+)~","$1.",$data); a co znamená tento regulérní výraz slovy. A konkrátně tento znak ~ ~([a-zA-Zěščřžýáíéůú]+)~ |
||
Ugo Profil |
#8 · Zasláno: 31. 10. 2011, 17:14:20
~ 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 |
#9 · Zasláno: 31. 10. 2011, 17:22:33
Omluvám se, ale asi jsem nepochopil to
Ugo: „kdyz je uvnitr regularu tak se musi escapovat“ |
||
Tori Profil |
#10 · Zasláno: 31. 10. 2011, 18:04:34
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 |
#11 · Zasláno: 31. 10. 2011, 18:13:47
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 |
#12 · Zasláno: 31. 10. 2011, 19:07:54 · Upravil/a: Tori
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]+)\.~ 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čí. |
||
Časová prodleva: 14 let
|
0