Autor Zpráva
Pan X
Profil
Dobrý večer,
poradil by mi někdo jak nahradit pomocí text mezi dvěmi elementy?

Potřebuji nahradit vše co je mezi </koncovým tagem> a <a začátečním tagem> s tím že text tagu bude muset být reg. výraz, neboť nikdy přesně nebudu vědět jaký je.

</[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]> to co je tady potřebuji nahradit za text "AHOJ"  <[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]>


Mohl by mi někdo poradit jak na to?

Předem díky

Pan X
Radek9
Profil
$string = preg_replace("/\<\/(.+?)\>(.+?)\<(.+?)\>/", "</\\1>AHOJ<\\3>", $string);


Edit: doplňuji verzi pro stejné tagy:
$string = preg_replace("/\<\/(.+?)\>(.+?)\<\\1\>/", "</\\1>AHOJ<\\1>", $string);
AM_
Profil
preg_replace('~(</[^>]+>)[^<]*(<[^>]+>)~', '\\1Ahoj\\2', $text);
Majkl578
Profil
echo preg_replace('~</([a-z]+)>.*<\\1>~i', '</$1>AHOJ<$1>', 'lorem ipsum</xxx>lorem ipsum<xxx>');


To jsme se tu pěkně sešli, že? ;)

PS: To co napsal Radek9 je nesmysl, nefunguje dle zadání.
Radek9
Profil
Majkl578:
PS: To co napsal Radek9 je nesmysl, nefunguje dle zadání.
E? Mnou zaslaný kód mi funguje. Zkoušel jsem ho.
Majkl578
Profil
[#5] Radek9
Tak to jsi asi nezkusil rozdílné tagy. Dle zadání to vypadá, že hledá mezi stejnými tagy. Pokud ne, tak nepůjde to moje. (Nic to nemění na tom, že kód od AM_ je lepší. ;))
Radek9
Profil
Majkl578:
Tak to jsi asi nezkusil rozdílné tagy. Dle zadání to vypadá, že hledá mezi stejnými tagy.
Právě, že zkusil, ale ze zadání mi vyplynula možnost rozdílných tagů. Ale co, jsou tu tři varianty. Ať si Pan X vybere...

Nic to nemění na tom, že kód od AM_ je lepší.
Já netvrdil, že je můj kód lepší. S regulárními výrazy začínám ;-)
Majkl578
Profil
Radek9:
Já netvrdil, že je můj kód lepší. S regulárními výrazy začínám ;-)
A já netvrdil, že jsi to tvrdil. Pouze jsem vyjádřil názor.
AM_
Profil
No ten můj také funguje i na rozdílné tagy, ale netušil jsem, že \\n jde použít už ve výraze, jsem rád, že jsem se o tom zde poučil :) Majklův kód je jednoznačně nejelegantnější a případná úprava na verzi pro libovolné tagy je banalita, že.
Majkl578
Profil
[#9] AM
Zas bych to nepřeháněl. Problém nastane ve chvíli, kdy se tag bude opakovat - nahradí se vše mezi prvním a posledním (ne mezi následujícím). Tohle bohužel nevím (a štve mě to :)) jak řešit, budu rád, když mě někdo poučí... :)
nightfish
Profil
Majkl578:
Problém nastane ve chvíli, kdy se tag bude opakovat - nahradí se vše mezi prvním a posledním (ne mezi následujícím). Tohle bohužel nevím (a štve mě to :)) jak řešit, budu rád, když mě někdo pouči... :)
modifikátor "U" (ungreedy)
Majkl578
Profil
nightfish:
Díky! Tím pádem by mělo toto být požadovaný výsledek:

echo preg_replace('~</([a-z]+)>.*<\\1>~iU', '</$1>AHOJ<$1>', 'aaaaa</xxx>bbbbb<xxx>ccccc</xxx>dddddd<xxx>eeeeee');
// aaaaa</xxx>AHOJ<xxx>ccccc</xxx>AHOJ<xxx>eeeeee

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: