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