Autor Zpráva
martin1312
Profil
Zdravim,

robim si regulár, na nahradenie absolútnej adresy webu za určitú značku. To mi v pohode funguje. Ja však chcem nahradenie previesť iba v prípade, že adresa sa NEnachádza medzi značkami <pre> a </pre>.

Tvar nahradzovanej adresy môže byť:
http://www.nieco.sk
http://nieco.sk

môj regulár na nahradenie adresy:
$url = 'nieco.sk';
$str = '<pre><a href="http://www.nieco.sk">fafaf</a></pre>';
echo preg_replace("/http:\/\/(\w\w\w\.)?".$url."/i", "http://{ccc}", $str);
to nahradí adresu aj v elemente <pre>

ďalej viem urobiť nahradenie skoro také, ake by som potreboval, ale je to obmedzené, že za hľadanou adresou sa nesmie nachádzať žiaden znak a hned musí nasledovať </pre>
$url = 'nieco.sk';
$str = '<a href="http://www.nieco.sk">fafaf</a> <pre>http://www.nieco.sk</pre>';
echo preg_replace("/[^(<pre>){1}.*]http:\/\/(\w\w\w\.)?".$url."([^(<\/pre>){1}])/i", "http://{ccc}", $str);
funguje podľa očakávania, prvý výskyt nahradí, druhý nie.

Ako mám upraviť regulár, aby bral ohľad aj na znaky medzi koncom adresy a </pre> ?

toto nefunguje
$url = 'nieco.sk';
$str = '<a href="http://www.nieco.sk">fafaf</a> <pre><a href="http://www.nieco.sk">fafaf</a></pre>';
echo preg_replace("/[^(<pre>){1}.*]http:\/\/(\w\w\w\.)?".$url."([^(.*)(<\/pre>){1}])/i", "http://{ccc}", $str);

Ďakujem za každú radu
Keeehi
Profil
Obecný regulár, aby to fungovalo u všech možných kombinací co mohou v html vzniknout mě nenapadá (i když teoreticky by snad měl jít sestavit). Pokud však můžete říct, že v pre bude vždy jen url nebo tag a, tak by to mělo jít udělat. Případně by to snad mělo jít udělat i kdyby bylo to url jen obalované tj. v pre by nebyl otevřen a uzavřen element ještě před url, ale až po něm.
martin1312
Profil
Keeehi:
to práve že povedať neviem. Medzi URL adresou a </pre> môžu byt hocijaké znaky, tagy...

PS. Dôležitá je pre mňa samotná URL adresa http://www.nieco.sk, nie to, že je umiestnená v <a>
Keeehi
Profil
V tom případě budete muset řetězec postupně projít a určovat kontext.
martin1312
Profil
Keeehi:
mohol by si to bližšie špecifikovať? S regularmi som začal včera :)

A prečo vlastne nefunguje jednoduche (.*) ako to mám na začiatku?
Keeehi
Profil
martin1312:
A prečo vlastne nefunguje jednoduche (.*) ako to mám na začiatku?
Já se vůbec divím, že vám ta druhá ukázka funguje. [^(<pre>){1}.*] znamená něco úplně jiného než si myslíte.

S regularmi som začal včera :)
Já už před několika lety a přesto to nedokážu vymyslet.

mohol by si to bližšie špecifikovať?
Musíš si najít meze nahrazovat mezi nimi.
nějaký text <pre>http://www.nieco.sk</pre> něco jiného http://www.nieco.sk
|           |                            |                               |
0           12                           41                              73
pak to pomocí substr rozsekat a nahrazovat jen v intevalech <0-12), (41-73>

Nejtěžší na tom bude určit že to má být 41, protože nestačí vyhledat první výskyt </pre> po <pre>, jelikož tam může být více vnořených pre.



Možná by někdo z tvůrců diskuze znal cestu. Jak je zde řešené převádění http://example.com na klikatelné odkazy jen mimo [pre]?
martin1312
Profil
Keeehi:
Ďakujem za vysvetlenie.

Já se vůbec divím, že vám ta druhá ukázka funguje. [^(<pre>){1}.*] znamená něco úplně jiného než si myslíte.
Ak tomu teda rozumiem správne, to čo je v hranatej zátvorke určuje možný výskyt, nie taký ako by mal nasledovať za sebou?

Máte pravdu, najlepšie by bolo vedieť ako to funguje tu. Týmto by som chcel poprosiť, aby sa vyjadrili tvorcovia. Dúfam, že sa niekto nájde :)
Ak nie, tak nevadí, budem nahradzovať aj v <pre></pre>

Ďakujem za snahu.

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: