Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Regex znak końca wyrazu, Problem z polskimi znakami
stygma
post
Post #1





Grupa: Zarejestrowani
Postów: 32
Pomógł: 1
Dołączył: 10.11.2007

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


$szukany - szukany wyraz z input formularza POST
Kod
preg_match_all("/^$szukany\b([^.]+)?/ix",$do_przeszukania,$dopasowanie,PREG_OFFSET_CAPTURE);

Chodzi o wyszukiwanie wyrazu(ów) z pierwszych wyrazów tekstów pobranych z bazy i wyświetlanie go z pozostałą częścią zdania aż do kropki (kropka nie musi być wyświetlana) kończącej pierwsze zdanie tekstu.
Wyraz ten może być zakończony kropką, wtedy tylko on zostanie wyświetlony jako $dopasowanie, lub być pierwszym wyrazem zdania, a po nim może być spacja, przecinek, dwukropek, średnik itp. a dalej reszta zdania.
Regex
Kod
"/^$szukany\b([^.]+)?/ix"

nie odróżnia, nie wyświetla wyrazów zakończonych polskim ogonkiem np. "widział" (ale np. ęóąśłżźćńA odróżnia).
Bez znaku końca wyrazu (to chyba asercja, czy jakośtam) "\b"
Kod
"/^$szukany([^.]+)?/ix"

działa poprawnie, ale też wyszukuje wyrazy, w których skład wchodzi wyraz szukany np. "widziałem", a tego nie ma robić. Próbowałem ustawiać mb_internal_encoding i mb_regex_encoding na iso-8859-2, czy utf-8, ale nie pomaga.

Apache/2.2.6 na localhost, php 5.1.6, mysql-5.0.27-1.

Pomóżta chłopaki, co?

pozdrawiam stygma
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
cbagov
post
Post #2





Grupa: Zarejestrowani
Postów: 181
Pomógł: 18
Dołączył: 19.04.2008

Ostrzeżenie: (10%)
X----


sproboj np. tak
w komentarzu jest jeden -?- wiecej co pozwala zatrzymywac sie na -.- pierwszej.

CODE


$do_przeszukania = "nie wyświetla wyrazów zakończonych polskim ogonkiem np. \"widział\" (ale np. ęóąśłżźćńA odróżnia). test.";
$_search = "widział";
$xxx = "ĄŻŚŹĘĆŃÓŁążśźęćńół";

preg_match_all("/(".$_search .".*[".$xxx."]*?)\./i", $do_przeszukania, $dopasowanie);

// ----- preg_match_all("/(".$_search .".*?[".$xxx."]*?)\./i", $do_przeszukania, $dopasowanie);

echo "<pre>";
var_dump ($dopasowanie);
echo "</pre>";

exit;
Go to the top of the page
+Quote Post
stygma
post
Post #3





Grupa: Zarejestrowani
Postów: 32
Pomógł: 1
Dołączył: 10.11.2007

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


Dzięki, ale
Kod
"/^(".$szukane .".*?[".$xxx."]*?)\./ix"

działa tak samo jak
Kod
"/^$szukane([^.]+)?/ix"

czyli oprócz "robią" wyszukuje też "robiącymi".

pozdrawiam stygma
Go to the top of the page
+Quote Post
Kicok
post
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


\b oznaczające początek wyrazu zamień na:
Kod
(?=[a-zA-Z0-9_ążśźęćńółĄŻŚŹĘĆŃÓŁ])


a \b oznaczające koniec wyrazu na:
Kod
(?![a-zA-Z0-9_ążśźęćńółĄŻŚŹĘĆŃÓŁ])




Nie zapomnij też o modyfikatorze u na końcu wyrażenia.


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
stygma
post
Post #5





Grupa: Zarejestrowani
Postów: 32
Pomógł: 1
Dołączył: 10.11.2007

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


Cytat("Kicok")
\b oznaczające początek wyrazu zamień

Na początku wyrazu nie ma problemów z ogonkami.

Cytat("Kicok")
Nie zapomnij też o modyfikatorze u na końcu wyrażenia.

Pisałem o próbach zmiany kodowania na utf-8, żeby sprawdzić, czy może "\b" obsługuje utf-8, tekst jest w iso.

Natomiast
Cytat("Kicok")
a \b oznaczające koniec wyrazu na:
Kod
(?![a-zA-Z0-9_ążśźęćńółĄŻŚŹĘĆŃÓŁ])

działa.
Dzięki.

pozdrawiam stygma

Ten post edytował stygma 18.05.2008, 15:15:20
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 - 12:37