Autor Zpráva
duskohu
Profil *
Dobry den,
viete mi niekto poradit potreboval by som prepisat v texte string napr.:

$text='kopať'; // chcem aby naslo
$text='akopať'; // nechcem aby naslo
$text='kopaťa'; // nechcem aby naslo
$text='kopať.'; // chcem aby naslo
$text='kopať,'; // chcem aby naslo
$text='kopať daco'; // chcem aby naslo
$text='dd kopať'; // chcem aby naslo

$regex = '/\b(kopať)\b/u';
$text = preg_replace($regex,"<h1>$1</h1>",$text);

pouzil som u koli UTF-8 a \b mi oznacuje koniec slova,
pokial zadam slovo ktore nekonci ť alebo nejaka ina diakritika {nemam odsledovane} tak mi to ide ale ak pouzijem diakritiku hlavne som si vsimol na konci slova tak mi to nefunguje, paradoxne najde len 'kopaťa' co nechcem

Viete mi niekto poradit?
dakujem.

Moderátor Davex: Titulek „[PHP] preg_replace“ nevystihuje podstatu dotazu. Příště zkus prosím vymyslet lepší.
Tori
Profil
duskohu:
Zkoušela jsem přesně ta slova, co jste napsal a fungovalo mi to tak, jak chcete. Není problém s odlišným kódováním skriptu a vstupu?
duskohu
Profil *
no subor je v utf-8 a nejde mi to ani ked vstup priamo napisem, uz vobec neciem co to moze .... :-(
Tori
Profil
duskohu:
nejde mi to ani ked vstup priamo napisem
Tak to je ale divné... Zkuste spustit tohle - hodnoty ve druhém a třetím sloupci by se měly shodovat. Pokud to bude fungovat, je chyba v diakritice/reguláru; pokud ne, tak příčinu netuším.
$text = array();
$text['kopať'] = 1; // chcem aby naslo
$text['akopať'] = 0; // nechcem aby naslo
$text['kopaťa'] = 0; // nechcem aby naslo
$text['kopať.'] = 1; // chcem aby naslo
$text['kopať,'] = 1; // chcem aby naslo
$text['kopať daco'] = 1; // chcem aby naslo
$text['dd kopať'] = 1; // chcem aby naslo

$regex = '/\b(kopať)\b/u';
echo '<table rules="all" cellpadding="5"><tr><th>Text<th>Očekáváno<th>Skutečný výsledek</tr>';

foreach($text as $slovo => $chci)    {
    echo "<tr><td>$slovo<td>" . ($chci ? 'Ano' : 'Ne') . '<td>' . (preg_match($regex, $slovo) ? 'Ano' : 'Ne') . '</tr>';
}
echo '</table>';
duskohu
Profil *
vratilo mi toto:

Text Očekáváno Skutečný výsledek
kopať Ano Ne
akopať Ne Ne
kopaťa Ne Ano
kopať. Ano Ne
kopať, Ano Ne
kopať daco Ano Ne
dd kopať Ano Ne


duskohu:

Neviem ci to mam spravne
pouzivam:


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

header("content-type: text/html; charset=utf-8");

subor je v UTF-8

este na nieco som zabudol????


duskohu:
ale ked zmenim kodovanie suboru na zapadoeuropsky tak to ide, ale potom mam v haji diakritiku na stranke :-(
Tori
Profil
duskohu:
Můžete, prosím, zkusit ten kód v [#4] ještě jednou s jiným regulárem?
$regex = '/(?<=^|[^\\p{L}])(kopať)(?=[^\\p{L}]|$)/u';
duskohu
Profil *
Tori:
tak toto ide bez problemu.
:-)
dakujem velmi pekne, ale taky regular by som asi nevyskladal ....
v com to bolo???
Tori
Profil
No z mojí hlavy to taky nejni. :) Manuál (escape sequences) mě navedl k tomu, že s modifikátorem u nemusí sekvence \w (a tedy i \b) fungovat vždy tak jak se čeká. Regulár je ze stackoverflow, sekvence \p{L} opět viz manuál (unicode properties).
duskohu
Profil *
Tori:

Vdaka ... :-)

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: