| 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: 7 let
|
|||
0