Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> problem z niektorymi znakami przy uzyciu REGEXP BINARY
misty
post 1.12.2011, 11:07:47
Post #1





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


czesc,
uzywam REGEXP BINARY do szukania jak LIKE ale z uwzglednieniem wielkosci znakow. Wszystko jest ok, dopoki nie uzyje niektorych znakow, takich jak np + czy ?

zapytanie wyglada mniej wiecej tak:

  1. SELECT * FROM users WHERE DESC REGEXP BINARY '+test'


i na takim sie krzaczy a ja dostaje:
Got error 'repetition-operator operand invalid' from regexp

jesli bym dala bez + to byloby ok.
Czy ktos z Was wie moze jak mozna to naprawic?

pzdr,
misty
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Crozin
post 1.12.2011, 11:57:21
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Wyrażenia regularne mają pewne znaki specjalnie. Jeżeli chcesz by były traktowane jako zwykłe znaki poprzedź je znakiem ucieczki: \+
2. Dlaczego nie skorzystasz z LIKE-a z uwzględnieniem wielkości znaków? LIKE sam w sobie to beznadziejny mechanizm wyszukiwania, ale wyrażenia regularne to już kompletne nieporozumienie.
Go to the top of the page
+Quote Post
misty
post 1.12.2011, 12:17:56
Post #3





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


hej,
ale istnieje LIKE ktory porownuje wielkosc znakow? szukalam ale nie znalazlam takiego-stad wyrazenia regularne.
Go to the top of the page
+Quote Post
Crozin
post 1.12.2011, 12:34:18
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Sposób porównywania znaków jest określany przez atrybut COLLATION kolumny. Ewentualnie jeżeli chcesz w tym konkretnym przypadku zastosować inne porównywanie znaków, niż domyślne dla kolumny, użyj następującej składni:
  1. ... WHERE col_name LIKE 'val' COLLATE 'utf8_unicode_cs' ...
Go to the top of the page
+Quote Post
misty
post 1.12.2011, 13:02:12
Post #5





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


no, a jesli nie znam COLLATE?
Go to the top of the page
+Quote Post
Crozin
post 1.12.2011, 13:15:46
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


http://dev.mysql.com/doc/refman/5.5/en/charset.html
9.1.1, 9.1.2
Go to the top of the page
+Quote Post
misty
post 1.12.2011, 13:28:57
Post #7





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


widzisz, ale ja nie mam uprawnien do ustawiania czegokolwiek na bazie. ja juz szukalam wyjscia z like no i w moim wypadku nie da sie. a wyrazenia regularne.. sa ok, tylko trzeba wiedziec jak ich uzyc.. i na pewno na moj problem tez jest sposob..
Go to the top of the page
+Quote Post
Crozin
post 1.12.2011, 14:02:26
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Przecież fragment kodu jaki podałem to zwykłe zapytanie (SELECT) do bazy, które nic nie modyfikuje.
Go to the top of the page
+Quote Post
misty
post 2.12.2011, 13:48:46
Post #9





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


no tak, ale ja pisalam ze nie znam COLLATE, wiec nie moge wykonac tego:

  1. WHERE col_name LIKE 'val' COLLATE 'utf8_unicode_cs' ...


nie mam rowniez uprawnien takich aby wykonac:

  1. SET NAMES 'utf8';


wracajac do Twojej wczesniejsze wypowiedzi, zeby poprzedzac znakiem ucieczki, to dziala (czesciowo przynajmniej) z podwojnym znakiem \\, ale niestety sypie sie jak dam np ?"\[i'
dostaje ze

mysql error: Got error 'brackets ([ ]) not balanced' from regexp

sad.gif



pzdr,
misty

jakby ktos mial kiedys taki problem jak ja-wyglada na to ze jednym rozwiazaniem jest stawianie \\ przed kazdym takim specjalnym znakiem.

pzdr

Ten post edytował misty 2.12.2011, 07:49:47
Go to the top of the page
+Quote Post
Crozin
post 2.12.2011, 18:35:18
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Przecież podałem Ci linka gdzie masz opisane systemy porównywania znaków (collations). Wybierz te , które odpowiada Twojemu kodowaniu (utf8_*, latin2_*) i oczekiwanym porownywaniem znaków (*_cs, *_ci).
2. Do SET NAMES nie potrzebujesz żadnych uprawnień. To charakteryzuje jedynie kodowanie / porównywanie znaków dla połączenia na linii klient - serwer.
3. Znak ucieczki to "\", nie "\\". "\\" to znak ucieczki przed znakiem ucieczki, czyli literał "\".
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 13:32