Обсуждение: Regexps -- too complex?

Поиск
Список
Период
Сортировка

Regexps -- too complex?

От
"Emils Klotins"
Дата:
Running 7.0.2 on Alpha/RedHat 6.2 256MB RAM

In order to implement a fulltext search, I have a func that parses list 
of words and creates a regexp query with things like [[:<:]]( word | 
word | ... )[[:>:]]

That query then is passed to backend...

Now the strange thing:

gamenet=# SELECT id, title,publishdate,categoryid FROM articles WHERE
translate(title,'abcdefghijklmnopqrstuvwxyzâèçìîíïòðûþõäöü','ABCDEFGHIJKLMNOPQRSTUVWXYZÂÈÇÌÎÍÏÒÐÛÞÕÄÖÜ')~
'(BLACK|SERIOUS|SAM)[[:>:]]'::text; id  |                      title                      | publishdate | categoryid
 
------+-------------------------------------------------+-------------+------------ 600 | Serious Sam ceïâ pie
pircçjiem                 | 2001-03-22  |        149 523 | Black & White gaidîðanas svçtki                 | 2001-03-19
|        155 241 | Lorgaine: The Black Standard - íeltu varoòeposs | 2001-02-27  |        155 707 | Lorgaine: The Black
Standardbeta versija       | 2001-03-23  |        1561484 | Black&White tomçr neesot spiegu programma   | 2001-04-18  |
      1551490 | Black & White FAQ                               | 2001-04-18  |        1601496 | Black & White
"ïaunais"FAQ                     | 2001-04-18  |        1601732 | Black & White - pârdotâkâ spçle ASV             |
2001-04-24 |        155
 
(8 rows)


gamenet=# SELECT id, title,publishdate,categoryid FROM articles WHERE
translate(title,'abcdefghijklmnopqrstuvwxyzâèçìîíïòðûþõäöü','ABCDEFGHIJKLMNOPQRSTUVWXYZÂÈÇÌÎÍÏÒÐÛÞÕÄÖÜ')~
'(BLACK|SERIOUS|WHITE|SAM)[[:>:]]'::text;id | title | publishdate | categoryid
 
----+-------+-------------+------------
(0 rows)


It seems that if the regexp is too complex (more than 3 |-ed 
elements) it doesnt return.

Any ideas?



Re: Regexps -- too complex?

От
"Emils Klotins"
Дата:
> SELECT id, title,publishdate,categoryid FROM articles WHERE
> upper(title) ~ '(BLACK|SERIOUS|SAM)[[:>:]]'::text ;
> 
> I think the proiblem is in trnsalte, not in regexp
> 
> If you have installed apprporiate character encoding in Postgres,
> 'upper' will work!
> 
>  Vladimir

Thanks for the advice, unfortunately, it does not seem to work that 
way.


CREATE TABLE "test" (       "title" text
);
COPY "test" FROM stdin;
Serious Sam ceïâ pie pircçjiem
Black & White gaidîðanas svçtki
Lorgaine: The Black Standard - íeltu varoòeposs
Lorgaine: The Black Standard beta versija
Black&White tomçr neesot spiegu programma
Black & White FAQ
Black & White "ïaunais" FAQ
Black & White - pârdotâkâ spçle ASV
\.


SELECT title FROM test WHERE title ~ '(BLACK|WHITE|SAM)';

yields 8 rows.

SELECT title FROM test WHERE title ~ 
'(BLACK|WHITE|blahblah|SAM)'; 

yields 0 rows!

SELECT title FROM test WHERE title ~ '(BLACK|WHITE|SAM) *'; 
also yields 0 rows!


I dont think this is right no matter what the characters I am using 
there. At least it shouldn't, should it?

Emils


Re: Regexps -- too complex?

От
Tom Lane
Дата:
"Emils Klotins" <emils@grafton.lv> writes:
> Running 7.0.2 on Alpha/RedHat 6.2 256MB RAM

Update to 7.1.  7.0.* has a lot of portability problems on Alphas,
and one of them is that regexps with between 33 and 64 states don't
work (int vs long problem...)
        regards, tom lane