Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] preg_replace wyróżnianie słów
uncuncunc
post
Post #1





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 1.04.2012

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Teraz zamienia jedynie pierwsze napotkane.
A skad ci to przyszło do głowy? Zamienia wszystko.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
uncuncunc
post
Post #3





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 1.04.2012

Ostrzeżenie: (0%)
-----


Nie.
Cytat
test asd margin-top test-kolejny margin

W "test-kolejny" został zaznaczony tylko "test", a nie cały.

Ten post edytował uncuncunc 3.12.2012, 20:23:42
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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' );


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
uncuncunc
post
Post #5





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 1.04.2012

Ostrzeżenie: (0%)
-----


  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ć?
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No napisałem: zmień kolejnosc smile.gif

Zaś błąd z podwójnym pogrubianiem to już inna bajka wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
uncuncunc
post
Post #7





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 1.04.2012

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
uncuncunc
post
Post #9





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 1.04.2012

Ostrzeżenie: (0%)
-----


Tylko jak? Zdawało mi się ze \b załatwia sprawę wyszukując. próbowałem też zastosować \w jednak bezskutecznie.
Go to the top of the page
+Quote Post
abort
post
Post #10





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


Spróbuj \W (duże).
Go to the top of the page
+Quote Post
uncuncunc
post
Post #11





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 1.04.2012

Ostrzeżenie: (0%)
-----


próbowałem, nie działa... już nie mam pomysłu...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 05:05