![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 64 Pomógł: 1 Dołączył: 5.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam, oto napisałem sobie bardzo prosty skrypcik do zamiany słów
![]() Wygląda on tak: Jednak problem jest taki, że w przypadku wyrazu np. daci zamieni to na daCi, a chodzi oto aby osobne wyrazy, co do spacji no to nie najlepsze rozwiązanie ponieważ zamiast spacji może być np. "," Można by było to zrobić w preg_replece jednak jest to strasznie mega wielkie do ogarnięcia w chwilę. Pozdrawiam ![]() |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Wyrażenia regularne są strasznie mega wielkie, ale to chyba jedyne rozsądne rozwiązanie. Teoretycznie powinno wystarczyć użycie
Kod $tekst = preg_replace( "~\bci\b~", "Ci", $tekst ); // \b oznacza "granicę słowa" które jest prostym wyrażeniem. W praktyce natomiast PHP nie rozpozna polskiej litery jako litery (będzie rozpoznawał granicę słowa między polską literą a zwykłą) i dalej ci się będzie psuło przy wyrażeniach typu "mąci". Pomoże dopiero emulowanie poprawnego działania \b przy użyciu przewidywania wprzód i wstecz. To jest strasznie mega wielkie, więc masz gotowca
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 452 Pomógł: 16 Dołączył: 25.05.2004 Skąd: Gorzów Wlkp. Ostrzeżenie: (0%) ![]() ![]() |
Jeśli masz zamiar używać tego tylko w przypadkach jak w 1 poście to polecam funkcję ucfirst();
Ten post edytował fiszol 27.01.2011, 05:57:29 -------------------- \o/
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Wyrażenia regularne rozpoznają polskie litery, ale domyślne kodowanie dla nich nie może być użyte. Niestety nigdy nie bawiłem się w to i nie wiem jak wymusić w RE użycie polskiego kodowania. Wiem, że jeśli się je zastosuje, to wyrażenie rozpozna, że ma do czynienia z polskim znakiem "ą" a nie znakiem pustym, ponieważ w nowszych wersjach można napisać w wyrażeniu [a-ż0-9] i jest ono prawidłowo interpretowane. Musiałbyś sprawdzić czy flaga u dla unicode coś zmieni
![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
@thek Niestety flaga "u" nic nie daje w tym przypadku. Granica słowa (\b) zostaje dopasowana w tych miejscach:
^\w \w$ \w\W \W\w \w to litery, cyfry i znak podkreślenia (\W - wszystko inne), ale dwubajtowe polskie litery z UTF-8 traktowane są jako dwa krzaki, które podchodzą raczej pod \W (nawet w przypadku użycia flagi "u"). O ile w przypadku iso-8859-2 czy windows-1250 pewnie dałoby radę "naprawić" \w ustawiając odpowiednie LOCALE, o tyle napisanie wyrażenia działającego identycznie jak \b dla kodowania utf-8 jest strasznie mega wielkie: http://ideone.com/3vard W takim wypadku lepiej sprawdzić, czy mb_ereg nie byłby lepszy. Ten post edytował Noidea 27.01.2011, 14:46:33 -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 05:48 |