Autor Zpráva
Trsak
Profil
Zdravím,
v regulerních výrazech se moc nevyznám. Sestrojil jsem si následující:
<?php
$udalost = '<a href="http://seznam.cz/">Franza</a> I levelled my Attack skill, I am now level 25.<br><a href="http://seznam.cz/">Franza</a> I levelled my Attack skill, I am now level 25.<br><a href="http://seznam.cz/">Franza</a> I levelled my Attack skill, I am now level 25.<br>';
$udalost = preg_replace('/\<a href="(.*)\">(.*)\<\/a> I levelled my (.*?)\ skill, I am now level (.*?)\.<br>/i', '<a href="$1">$2</a> zvýšil svůj $3 skill, nyní má level $4.', $udalost);
echo ($udalost);
?>

Problém je, žě část <a href="(.*)\">(.*)\<\/a> bere vše od prvního <a> až po poslední </a>. Výsledek je proto takovýto:
Franza I levelled my Attack skill, I am now level 25.
Franza I levelled my Attack skill, I am now level 25.
Franza zvýšil svůj Attack skill, nyní má level 25.

Jak tomu zabránit?
juriad
Profil
Použij místo .* raději .*?. Liší se tím, že varianta s otazníkem není žravá.

Dalši možností je použití [^<]* tedy povolení všeho kromě špičaté závorky.
Trsak
Profil
Varianta s otazníkem opravdu funguje, díky.


Narazil jsem na problém - chci ve výsledku před odkaz přidat obrázek, tedy takto:
<img src="$3.png" width="18"> <a href="$1">$2</a> zvýšil svůj $3 skill, nyní má level $4.
<obrázek> Franza zvýšil svůj Attack skill, nyní má level 25.
<obrázek> Franza zvýšil svůj Attack skill, nyní má level 25.
<obrázek> Franza zvýšil svůj Attack skill, nyní má level 25.

Problém je, že když proměnná $udalost obsahuje odkaz třeba na začátku, tak se obrázek špatně umístí:
$udalost = '<a href="#">Toto je ten odkaz</a> <a href="http://seznam.cz/">Franza</a> I levelled my Attack skill, I am now level 25.<br><a href="http://seznam.cz/">Franza</a> I levelled my Attack skill, I am now level 25.<br>';
<obrázek> Toto je ten odkaz Franza zvýšil svůj Attack skill, nyní má level 25.
<obrázek> Franza zvýšil svůj Attack skill, nyní má level 25.
<obrázek> Franza zvýšil svůj Attack skill, nyní má level 25.

Jak zařídit aby byl výsledek takto?:
Toto je ten odkaz <obrázek> Franza zvýšil svůj Attack skill, nyní má level 25.
peta
Profil
Trsak:
Vidim to tak na dve moznosti. Bud vis, kolikatym odkazem to zacina a pouzijes preg_replace_callback s pocitanim a nebo upresnis href tak, aby se vyloucili ze seznamu ostatni odkazy, treba jako href="h.* vylouci href="#, protoze privni znak je krizek a pismeno h (nebo href="\w).

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: