Re: Selection ganzer Worte per regexp Suche

Lars Grundei <[email protected]>
Newsgroups gmane.comp.db.postgresql.german
Message-ID <0EAF4A34C2A33B4FB958F0A6150072AC4B3DD8C1DA@mcsrv03.meteocontrol.intra>

> -----Ursprüngliche Nachricht-----
> Von: [email protected] [mailto:pgsql-de-allgemein-
> [email protected]] Im Auftrag von Andreas Tille
> Gesendet: Donnerstag, 11. Juli 2013 17:07
> An: [email protected]
> Betreff: [pgsql-de-allgemein] Selection ganzer Worte per regexp Suche
> 
> Hallo,
> 
> ich möchte aus folgender Tabelle
> 
> CREATE table test (
>    row  int,
>    data text
> ) ;
> 
> INSERT INTO test VALUES ( 1, 'abc' );
> INSERT INTO test VALUES ( 2, 'abc, xyz' ); INSERT INTO test VALUES ( 3,
'uvw,
> abc, xyz' ); INSERT INTO test VALUES ( 4, 'xabc' ); INSERT INTO test
VALUES (
> 5, 'yabcz' );
> 
> alls die Zeilen heraussuchen, in denen das ganze Wort 'abc' vorkommt aber
eben
> nicht sowas wie 'xabc'.  Mit anderen Worten, die Abfrage soll nur die
Zeilen
> 1, 2 und 3 enthalten, das heißt
> 
> SELECT * FROM test WHERE data like '%abc%' ;
> 
> liefert zu viel.  Ich habe also mit regexp experimentiert und dachte sowas
wie
> 
> SELECT * FROM test WHERE data ~ '\babc\b' ;
> 
> wäre eine gute Idee - das liefert aber keine Zeile.  Selbst
> 
> SELECT * FROM test WHERE data ~ '.*\babc\b.*' ;
> 
> liefert nichts - scheinbar ist '\b' (Wortgrenze) nicht implementiert.
> Wie kann man die betreffenden Zeilen geschickt herausfiltern?
> 
> Bemerkung:  In meiner Anwendung werden die Worte immer durch ', '
> getrennt, wenn es mehrere sein sollten.  Eventuell kann man die also in
ein
> Array aufsplitten und dann im Array nach ganzen Wörtern suchen.
> Da ich denke, daß sowas länger dauert, würde ich die regexp Methode
> bevorzugen.
> 

Ohne es jetzt genau probiert zu haben, aber diese Regex sollte genau das tun
'((\s|,)abc(\s+|,|$)|^abc$)'.
smime.p7s (application/x-pkcs7-signature, 6.1 KB) - not displayed
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.