Autor | Zpráva | ||
---|---|---|---|
duskohu Profil * |
#1 · Zasláno: 22. 2. 2012, 19:21:51 · Upravil/a: Moderátor (editace znemožněna) 22. 2. 2012, 20:55:38
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 |
#2 · Zasláno: 22. 2. 2012, 22:12:16
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 * |
#3 · Zasláno: 22. 2. 2012, 22:31:27
no subor je v utf-8 a nejde mi to ani ked vstup priamo napisem, uz vobec neciem co to moze .... :-(
|
||
Tori Profil |
#4 · Zasláno: 22. 2. 2012, 22:41:40
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 * |
#5 · Zasláno: 22. 2. 2012, 22:53:11 · Upravil/a: duskohu
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 |
#6 · Zasláno: 22. 2. 2012, 23:11:51
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 * |
#7 · Zasláno: 22. 2. 2012, 23:17:36
Tori:
tak toto ide bez problemu. :-) dakujem velmi pekne, ale taky regular by som asi nevyskladal .... v com to bolo??? |
||
Tori Profil |
#8 · Zasláno: 22. 2. 2012, 23:26:17
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 * |
#9 · Zasláno: 22. 2. 2012, 23:27:07
Tori:
Vdaka ... :-) |
||
Časová prodleva: 12 let
|
0