| 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: 16 let
|
|||
0