Autor Zpráva
Milkys
Profil
Dobrý den dámy a pánové,
používám níže uvedenou vlastní funkci VytvorOdkaz(). Najde v řetězci (parametr $retezec) hledané slovo, frázi (parametr $hledam) a vytvoří z tohoto slova či fráze odkaz kolikrát potřebuji ($max). Je to funkční, jenom bych to chtěl vylepšit. Proto se ptám.

1.) Věděl by někdo jak to napsat jednodušeji např. pomocí reguláru nebo přehledněji?
2.) Rád bych, aby to umělo navíc najít a vytvořit odkaz včetně některých předložek (skloňování mám vyřešeno).

V níže uvedené funkci VytvorOdkaz() je to předvedeno (domnívám se, že složitě, ale funkčně) s čárkou i tečkou, které následují v řetězci za hledaným slovem či frází.
Částečně funguje toto s předložkami do, z nebo mezerou před hledaným slovem a čárkou, tečkou nebo mezerou za slovem:
$hledam_param = "~(do|z|\s)$hledam(,|\.|\s)~";

Za předpokladu, že se slovo nebo fráze v řetězci nachází potom, nevím, která podmínka je splněna a nastává problém co na začátek a konec anchoru vložit. Anchor potřebuji stejný, aby se nezměnil význam řetězce.
Chápeme se?

Děkuji za reakce a návrhy.


function AddNbsp($neco) {
    $nahrad = Array(
    ' '=>' '
    );
    return strtr($neco, $nahrad);
}

function VytvorOdkaz($hledam, $retezec) {
    $count=0;
    $max=1;
    $mesto = $hledam;
      $hledam_s = AddNbsp($hledam); // anchor s  
      $kolikrat_nahradit = $max; 

      if ($count < $max) {
         $hledam_param = "~ $hledam ~"; //slovo, které hledám
         $cim_nahradit = "<a href=\"/odkaz/\"> $hledam_s </a> "; //náhrada s mezerou 
         $ret = preg_replace($hledam_param, $cim_nahradit, $retezec, $kolikrat_nahradit, $count);
      }
      if ($count < $max) {
         $hledam_param = "~ $hledam,~"; //slovo, které hledám
         $cim_nahradit = "<a href=\"/odkaz/\"> $hledam_s, </a>"; //náhrada s čárkou na konci 
         $ret = preg_replace($hledam_param, $cim_nahradit, $retezec, $kolikrat_nahradit, $count);
      }
      if ($count < $max) {
         $hledam_param = "~ $hledam\.~"; //slovo, které hledám
         $cim_nahradit = " <a href=\"/odkaz/\"> $hledam_s. </a>"; //náhrada s tečkou na konci
         $ret = preg_replace($hledam_param, $cim_nahradit, $retezec, $kolikrat_nahradit, $count);
      }
      return $ret;
}
Tori
Profil
Metaznak \b značí hranici slova (tj. místo mezi dvěma znaky, z nichž jeden je alfanumerický a druhý je mezera, interpunkce, konec či začátek řetězce apod.) to by se tu dalo použít z obou stran hledaného výrazu. (viz manuál)
Kubo2
Profil
Milkys:
Nehľadáš niečo podobné?
http://www.regularnivyrazy.info/prevedeni-url-na-odkaz.html
Milkys
Profil
Tori:
Děkuji, pročtu.
Kubo2:
V podstatě by se to asi dalo použít, předělám si to, vyzkouším (regulární výrazy nejsou moje silná stránka) a dám vědět.
Milkys
Profil
Tori, Kubo2:

Tak je to dobrý, povedlo se to zjednodušit. Stačilo jen změnit toto:

$hledam_param = "~(do |od |na |\s)$hledam(\s|,|\.)~";
$cim_nahradit = "<strong><a href=\"/odkaz/\">".AddNbsp("\$1$hledam_s")."\$2</a></strong>";

Funguje to. Děkuji. Pokud tam mám chyby v syntaxi, opravte mně prosím.
Edit: Nefunguje jen fce AddNbsp() na přidání nedělitelné mezery, ale to už zvládnu opravit.
white-space:nowrap

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: