Lists: | pgsql-de-allgemein |
---|
From: | Florian Aumeier <faumeier(at)mediaventures(dot)de> |
---|---|
To: | "pgsql-de-allgemein(at)postgresql(dot)org" <pgsql-de-allgemein(at)postgresql(dot)org> |
Subject: | Pattern Matching |
Date: | 2008-07-07 07:31:35 |
Message-ID: | 4871C657.6090603@mediaventures.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-de-allgemein |
Guten Morgen allerseits
wie kann ich bei Postgres in einem Pattern eine Zeichenfolge ausschließen?
Als Beispiel zwei unterschiedliche URL. Die erste URL soll gematched
werden, die zweite nicht:
a) 'http://asbojesus.wordpress.com/2007/03/02/14/'
b) 'http://feeds.wordpress.com/1.0/goreddit/globolibro.wordpress.com/319/'
Meine Idee war es mit diesem Pattern zu machen
E'^http://[a-zA-Z0-9]+[^(feeds)]\.wordpress\.com'
was leider nicht funktioniert, da dass [^(feeds)] nicht nur die
Zeichenfolge 'feeds' ausschließt, sondern die einzelnen Zeichen 'f e d s'.
Zum testen:
SELECT * from
regexp_matches('http://asbojesus.wordpress.com/2007/03/02/14/',
E'^http://[a-zA-Z0-9]+[^(feeds)]\.wordpress\.com');
SELECT * from
regexp_matches('http://feeds.wordpress.com/1.0/goreddit/globolibro.wordpress.com/319/',
E'^http://[a-zA-Z0-9]+[^(feeds)]\.wordpress\.com');
Gruß
Florian
From: | Michael Renner <renner(at)inqnet(dot)at> |
---|---|
To: | Florian Aumeier <faumeier(at)mediaventures(dot)de> |
Cc: | "pgsql-de-allgemein(at)postgresql(dot)org" <pgsql-de-allgemein(at)postgresql(dot)org> |
Subject: | Re: Pattern Matching |
Date: | 2008-07-07 09:19:04 |
Message-ID: | 4871DF88.40101@inqnet.at |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-de-allgemein |
Florian Aumeier schrieb:
> Guten Morgen allerseits
>
> wie kann ich bei Postgres in einem Pattern eine Zeichenfolge ausschließen?
>
> Als Beispiel zwei unterschiedliche URL. Die erste URL soll gematched
> werden, die zweite nicht:
>
> a) 'http://asbojesus.wordpress.com/2007/03/02/14/'
> b) 'http://feeds.wordpress.com/1.0/goreddit/globolibro.wordpress.com/319/'
>
> Meine Idee war es mit diesem Pattern zu machen
>
> E'^http://[a-zA-Z0-9]+[^(feeds)]\.wordpress\.com'
>
> was leider nicht funktioniert, da dass [^(feeds)] nicht nur die
> Zeichenfolge 'feeds' ausschließt, sondern die einzelnen Zeichen 'f e d s'.
Um das so umzusetzen brauchst du einen negative lookbefore [1]; ich bin
mir nicht sicher ob das in den PG PCRE implementiert ist.
Zum allgemeinen regex-basteln eignen sich Regex Coach [2] oder ähnliche
Tools ziemlich gut (interaktives Testen).
Und als Lösungsansatz würd ich unter der Annahme, dass die URLs einzeln
in einer Column stehen, ein "not ilike 'http://feeds.wordpress.com/%'"
empfehlen, das sollt auch relativ flott sein.
lg,
michael
[1] http://www.regular-expressions.info/lookaround.html
[2] http://www.weitz.de/regex-coach/
--
Michael Renner
InQnet GmbH
Praterstraße 31
A-1020 Wien
Tel.: +43 1 212 7650 521
Fax.: +43 1 212 7650 610
From: | Thomas Markus <t(dot)markus(at)proventis(dot)net> |
---|---|
To: | "pgsql-de-allgemein(at)postgresql(dot)org" <pgsql-de-allgemein(at)postgresql(dot)org> |
Subject: | Re: Pattern Matching |
Date: | 2008-07-07 10:13:52 |
Message-ID: | 4871EC60.7000504@proventis.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-de-allgemein |
hi,
versuchs doch mit mal so
select
a.c , a.c ~ '^http://(?!feeds)\..*'
from
(
select 'http://asbojesus.wordpress.com/2007/03/02/14/' as c
union all
select
'http://feeds.wordpress.com/1.0/goreddit/globolibro.wordpress.com/319/' as c
) a
aber das ilike vom michael ist eher anzuraten
gruss
Thomas
Florian Aumeier schrieb:
> Guten Morgen allerseits
>
> wie kann ich bei Postgres in einem Pattern eine Zeichenfolge
> ausschließen?
>
> Als Beispiel zwei unterschiedliche URL. Die erste URL soll gematched
> werden, die zweite nicht:
>
> a) 'http://asbojesus.wordpress.com/2007/03/02/14/'
> b)
> 'http://feeds.wordpress.com/1.0/goreddit/globolibro.wordpress.com/319/'
>
> Meine Idee war es mit diesem Pattern zu machen
>
> E'^http://[a-zA-Z0-9]+[^(feeds)]\.wordpress\.com'
>
> was leider nicht funktioniert, da dass [^(feeds)] nicht nur die
> Zeichenfolge 'feeds' ausschließt, sondern die einzelnen Zeichen 'f e d
> s'.
>
> Zum testen:
>
> SELECT * from
> regexp_matches('http://asbojesus.wordpress.com/2007/03/02/14/',
> E'^http://[a-zA-Z0-9]+[^(feeds)]\.wordpress\.com');
>
> SELECT * from
> regexp_matches('http://feeds.wordpress.com/1.0/goreddit/globolibro.wordpress.com/319/',
> E'^http://[a-zA-Z0-9]+[^(feeds)]\.wordpress\.com');
>
>
> Gruß
> Florian
>
Attachment | Content-Type | Size |
---|---|---|
t_markus.vcf | text/x-vcard | 255 bytes |
From: | Florian Aumeier <faumeier(at)mediaventures(dot)de> |
---|---|
To: | "pgsql-de-allgemein(at)postgresql(dot)org" <pgsql-de-allgemein(at)postgresql(dot)org> |
Subject: | Re: Pattern Matching |
Date: | 2008-07-07 10:39:14 |
Message-ID: | 4871F252.4080507@mediaventures.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-de-allgemein |
Danke für die Hinweise, besonders an Michael.
Postgres hat den negativen und positiven lookahead implementiert und
damit funktioniert es so wie es soll.
SELECT 'http://feeds.wordpress.com' ~
E'^http://(?!feeds)[^.]+\\.wordpress\\.com';
?column?
----------
f
(1 row)
Und das zweite Beispiel ist true:
SELECT 'http://asbojesus.wordpress.com/2007/03/02/14/' ~
E'^http://(?!feeds)[^.]+\\.wordpress\\.com';
?column?
----------
t
(1 row)
Gruß
Florian
From: | "Albe Laurenz" <laurenz(dot)albe(at)wien(dot)gv(dot)at> |
---|---|
To: | "Florian Aumeier *EXTERN*" <faumeier(at)mediaventures(dot)de>, <pgsql-de-allgemein(at)postgresql(dot)org> |
Subject: | Re: Pattern Matching |
Date: | 2008-07-07 12:03:32 |
Message-ID: | D960CB61B694CF459DCFB4B0128514C2024B080A@exadv11.host.magwien.gv.at |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-de-allgemein |
Florian Aumeier wrote:
> wie kann ich bei Postgres in einem Pattern eine Zeichenfolge
> ausschließen?
>
> Als Beispiel zwei unterschiedliche URL. Die erste URL soll gematched
> werden, die zweite nicht:
>
> a) 'http://asbojesus.wordpress.com/2007/03/02/14/'
> b) 'http://feeds.wordpress.com/1.0/goreddit/globolibro.wordpress.com/319/'
Ich weiß nicht, ob es mit _einem_ Pattern geht.
Ich würde zwei nehmen:
(col ~ E'^http://[a-zA-Z0-9]*\.wordpress\.com') AND
(col !~ E'^http://[a-zA-Z0-9]*feeds.*\.wordpress\.com')
oder sowas in der Art.
Liebe Grüße,
Laurenz Albe