Autor | Zpráva | ||
---|---|---|---|
SteveO Profil * |
Zdravím, pomůže někdo se zápisem preg_replace?
Potřeboval bych v textu najít a nahradit všechny URL adresy tímto způsobem: http(s)://www.domena.cz/sekce1/sekce2/sekce3 na https://www.domena.cz/sekce3 Zanoření může být různě hluboké, takže může být různý počet lomítek. |
||
RastyAmateur Profil |
#2 · Zasláno: 23. 9. 2018, 13:47:57
SteveO:
Pokud jsou adresy dány VŽDY v uvedeném příkladu ( http(s)://blabla ), můžeš to vyřešit i bez reguláru. Třeba pomocí explode, nebo str_* funkcí
|
||
SteveO Profil * |
#3 · Zasláno: 23. 9. 2018, 14:13:57
Předmětný řetězec neobsahuje jen tu URL, ale dlouhé texty (popisky produktů), potřebuju regulár...
|
||
Luky Profil |
Mohlo by stačit třeba jen něco takového:
preg_match_all("/.*domena\.cz(.*)\/.*/", $input, $matches); foreach ($matches[0] as $key => $oldDomain){ $newDomain = str_replace($matches[1][$key], '', $oldDomain); } přidat ještě nějaký ify a nahradit oldDOmain za newDomain tam kde potřebuješ. |
||
DarkMeni Profil |
Nebo na jeden řádek
<?php $url = "dfkljdlkj https://www.domena.cz/sekce1/sekce2/lkdfjlk/sekce3 dfjlk https://www.domena.cz/sekce1/sekce2/sekce6755"; echo preg_replace("|(https?://www\.domena\.cz)[/\w]+(/\w+)|", "$1$2", $url); // pripadne: echo preg_replace("|(https?://(www\.)?domena\.cz)[/\w]+(/\w+)|", "$1$3", $url); ?> Edit: teda... blbě, tohle sežere všechen text okolo a nechá jen ty adresy, což asi nechceš, sorry xD Edit2: Aha, nesežere, tak dobrý =) |
||
SteveO Profil * |
#6 · Zasláno: 23. 9. 2018, 15:54:04
Nakonec jsem vyplodil tohle, potřeboval jsem i výsledky nahrazení:
private function shortenUrls($text) { $text = preg_replace_callback("|//(www.)?domena.cz/([0-9a-zA-Z\-/]*)|", function ($matches) { if (strpos($matches[0], 'domena.cz/') !== false) { $m1 = explode('.cz/', $matches[0]); $m2 = explode('/', trim($m1[1], '/')); if (count($m2) > 1) { $m3 = end($m2); $result = '//domena.cz/' . $m3; echo "\"<span style=\"color: red;\">" . $matches[0] . "</span>\" → \"<span style=\"color: blue;\">" . $result . "\"</span><br />"; return $result; } } return $matches[0]; }, $text); return $text; } |
||
Časová prodleva: 6 let
|
0