Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] preg_replace wyróżnianie słów
Forum PHP.pl > Forum > Przedszkole
uncuncunc
  1. $source = 'test asd margin-top test-kolejny margin';
  2. $a = array('margin-top','margin', 'test', 'test-kolejny');
  3.  
  4. foreach ($a as $k => $v)
  5. {
  6. $source = preg_replace('/\\b'.$v.'\\b/i', '<b>'.$v.'</b>', $source);
  7. }


W jaki sposób zamienić wszystkie słowa, te które są w tablicy? Teraz zamienia jedynie pierwsze napotkane.
nospor
Cytat
Teraz zamienia jedynie pierwsze napotkane.
A skad ci to przyszło do głowy? Zamienia wszystko.
uncuncunc
Nie.
Cytat
test asd margin-top test-kolejny margin

W "test-kolejny" został zaznaczony tylko "test", a nie cały.
nospor
Przeglądarka -> źródło strony
a dowiesz się czemu masz taki efekt smile.gif

Albo inaczej:
zmień kolejnosc, czyli tak ma byc:
$a = array('margin-top','margin','test-kolejny', 'test' );
uncuncunc
  1. <b>test</b> asd <b><b>margin</b>-top</b> <b>test</b>-kolejny <b>margin</b>


Hmm, ok rozumiem, tylko jak to naprawić?
nospor
No napisałem: zmień kolejnosc smile.gif

Zaś błąd z podwójnym pogrubianiem to już inna bajka wink.gif
uncuncunc
Kombinuję z kolejnością, jednak muszę to jakoś posortować z automatu, ponieważ to nie ja ustalam słowa w tablicy, tylko je pobieram.

dodałem
  1. rsort($a, SORT_STRING);


W przykładzie wyżej niby jest dobrze, ale... jeśli dodam nowe słowa np. "hex", "hex-color" oraz "color" to są źle posortowane. Jest jakaś funkcja w PHP która posortuje w kolekności odwrotnej i ułoży alfabetycznie jeśli w słowie występuje "-" bo chyba w tym jest problem.
nospor
Jesli chcesz to zrobić naprawdę poprawnie, to musisz zmodyfikować wyrażenie, by zamieniał tylko słowa a nie zlepek liter które pasują.

Jeśli np. zamieniasz słowo "ola" to w zdaniu
to jest OLA i mola oraz OLA i cola
to on ma zamieniać tylko słowa czyli to co napisałem dużymi. Twoje wyrażenie zaś zamieni teraz również "mola" oraz "cola" co raczej nie jest oczekiwanym rezultatem.
Jeśli byś więc poprawił to wyrażenie, wówczas problem z kolejnością by znikł z automatu
uncuncunc
Tylko jak? Zdawało mi się ze \b załatwia sprawę wyszukując. próbowałem też zastosować \w jednak bezskutecznie.
abort
Spróbuj \W (duże).
uncuncunc
próbowałem, nie działa... już nie mam pomysłu...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.