Autor | Zpráva | ||
---|---|---|---|
Sanky Profil |
#1 · Zasláno: 21. 10. 2009, 12:37:19
Dobrý den,
Udělal jsem si cyklus, který mi pomocí strpos() najde první umístění určeného textu v řetězci. Nyní bych potřeboval smazat to, co je na daných souřadnicích (vím přesně co chci smazat a kde je to umístěno) a poté nahradit novým textem. Snažil jsem se to provést pomocí preg_replace(): text2 = preg_replace("0d0a",'<font color="#C79200">5c</font>', $text2, 1); Háže mi to ale následující chybu: Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in ___.php on line 34 Jistě je i jiné řešení než jednou vyhledat a nahradit text, když už vím jeho umístění. Mohl by mi někdo prosím pomoci? Jsem v PHP relativně nový. Děkuji předem Sanky |
||
Majkl578 Profil |
#2 · Zasláno: 21. 10. 2009, 13:17:21
[#1] Sanky
Delimiter must not be alphanumeric or backslash Zapoměl jsi na delimitery, které nesmí být písmena, čísla a zpětné lomítko. Např.: preg_replace('~0d0a~','<font color="#C79200">5c</font>', $text2, 1); |
||
Sanky Profil |
#3 · Zasláno: 21. 10. 2009, 13:25:51 · Upravil/a: Sanky
Děkuji za pomoc -- program teď nehází chybu, nicméně zasekne se do nekonečného cyklusu.
Kód mám následující: $nl = 0; $i = 0; $bezi = true; while ($bezi != false) { $nl = strpos($text2,'0d0a',$nl); echo $nl; if($nl == false) { $bezi=false; }elseif (strpos($text2,'0d0a0d0a',$nl)<$nl+3) { $text2 = preg_replace("~0d0a0d0a~",'<font color="#C74F00">004c823e</font>', $text2, 1); $i = 0; }elseif($i == 0) { $text2 = preg_replace("~0d0a~",'<font color="#C79200">5c</font>', $text2, 1); $i++; }elseif($i == 1) { $text2 = preg_replace("~0d0a~",'<font color="#C79200">004c603e</font>', $text2, 1); $i = 0; }else {echo "WHOOPS AN ERROR";} } Má to buď najít dva nové řádky (a ty nahradit), nebo jeden a nahradit ho podle toho jestli je sudý nebo lichý. |
||
Alphard Profil |
#4 · Zasláno: 21. 10. 2009, 19:31:56
Sanky:
Abych pravdu řekl, nechce se mi studovat váš algoritmus a vzhledem k živosti tohoto vlákna ani nikomu jinému. Zkuste srozumitelně popsat, čeho chcete dosáhnout, ideálně na příkladu vstupu a výstupu. Z prvního příspěvku "Udělal jsem si cyklus, který mi pomocí strpos() najde první umístění určeného textu" moc moudrý nejsem. Jestli hledáte pouze první umístění, tak nevím, proč ten cyklus. |
||
AM_ Profil |
#5 · Zasláno: 21. 10. 2009, 21:24:20
toto
while ($bezi != false) { $nl = strpos($text2,'0d0a',$nl); echo $nl; if($nl == false) by šlo nahradit pouze tímto while ($nl = strpos($text2,'0d0a',$nl)) { protože - příkaz přiřazení ve výrazu vrací to, co bylo přiřazeno - u podmínky ve while není nutné uvádět != false, protože výrok "A" je to samé jako "není nepravda, že A" jinak proč ti to cyklí nejlíp zjistíš sám, buď použij nějaký debugger, nebo si třeba v každém provedeném cyklu vypiš na výstup, co se děje (na jaké pozici to našlo 0d0a, jak vypadá řetězec po nahrazení...) |
||
Časová prodleva: 14 let
|
0