Autor Zpráva
4ever
Profil
Zdravím,
potřeboval bych trochu poradit.
Mám takovýto kód:

foreach ($o[0] as $item):
 $id++;
 $item = preg_replace("/# -- Trigger(\d+)--/", "", $item);
endforeach;


Potřeboval bych změnit číslo Triggeru na $id. Umím jen dosadit obsah předlohy, ale nevím jak to zaměnit.
Prosím o pomoc.
king26
Profil
4ever:
Myslíš třeba takto?
foreach ($o[0] as $item):
 $id++;
 $item = preg_replace("/# -- Trigger".$id."--/", "", $item);
endforeach;


Nebo nahradit číslo za id?
foreach ($o[0] as $item):
 $id++;
 $item = preg_replace("/(# -- Trigger)(\d+)(--)/", "$1".$id."$3", $item);
endforeach;


Nevím, jestli jsem tě správně pochopil.
4ever
Profil
king26:
Dík, správně je ta verze 2.
4ever
Profil
Ale ještě mi to nejede tak jak bych chtěl.

id je 2113.
Chci vrátit tento řetězec:
# -- Trigger2113--

$item = preg_replace("/(Trigger)(\d+)(--)/", "$1 "."$id$3", $item);

Vrácený řetězec je:
# -- Trigger 2113--
ale má to být bez mezery mezi Trigger a číslem.

Když dám mezeru pryč:
$item = preg_replace("/(Trigger)(\d+)(--)/", "$1"."$id$3", $item);

Tak to nevrátí správný výsledek:
# -- 113--
Slovo trigger tam není a jakoby to smazalo tu dvojku.

Čili otázka zní, jak to zapsat, abych nemusel dávat mezeru mezi $1 a $id?
king26
Profil
Nevykoumal jsem, jak to udělat v tom jednom preg_replace.

Ale jde to nějak takto:
$item = str_replace("{{ID}}", $id, preg_replace("/(Trigger)(?:\d+)(--)/", "$1{{ID}}$2", $item));
4ever
Profil
king26:
Já to taky udělal dvěma příkazama. Akorád místo mezery jsem vložil zavináč.
4ever
Profil
Bylo by možné tento příkaz upravit tak,
preg_replace('/(?<=Effect:start).+(?=EndEffect:end)/sm', "", $item); // remove inside of the effect, but leave the frame.

aby před "EndEffect:end" zůstalo zalomení?

Příkaz má vymazat to, co je mezí "Effect:start" a "EndEffect:end". Před "EndEffect:end" je zalomení a tabulátor.

"     Effect:start
      nejaký text
      EndEffect:end"


Tabulátor chci taky vymazat ale zalomení nechat, takže výsledný text má být:

"     Effect:start
EndEffect:end"
king26
Profil
4ever:
Bylo by možné tento příkaz upravit tak aby před "EndEffect:end" zůstalo zalomení?

Šlo, přidáním \n\t před výraz:
'/(?<=Effect:start).+(?=\\n\\tEndEffect:end)/sm'

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