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 |
#3 · Zasláno: 11. 1. 2014, 15:09:00
|
||
Milkys Profil |
#4 · Zasláno: 11. 1. 2014, 15:29:45
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 |
||
Časová prodleva: 11 let
|
0