Pattern Matching
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.wordpres s.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/glob olibro.wordpr=
ess.com/319/',
E'^http://[a-zA-Z0-9]+[^(feeds)]\.wordpress\.com');
Gruß
Florian
--
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein [at] postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein
Re: Pattern Matching
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.wordpres s.com/31=
9/'
>
> 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 einze=
ln
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
--
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein [at] postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein
Re: Pattern Matching
This is a multi-part message in MIME format.
--------------060802010108080003070301
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: quoted-printable
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.wordpres s.com/319/' a=
s 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.wordpres s.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/glob olibro.word=
press.com/319/',
> E'^http://[a-zA-Z0-9]+[^(feeds)]\.wordpress\.com');
>
>
> Gruß
> Florian
>
--------------060802010108080003070301
Content-Type: text/x-vcard; charset=utf-8;
name="t_markus.vcf"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="t_markus.vcf"
begin:vcard
fn:Thomas Markus
n:Markus;Thomas
org:proventis GmbH
adr:;;Zimmerstr. 79-80;Berlin;Berlin;10117;Germany
email;internet:t.markus [at] proventis.net
tel;work:+49 30 29 36 399 22
x-mozilla-html:FALSE
url:http://www.proventis.net
version:2.1
end:vcard
--------------060802010108080003070301
Content-Type: text/plain
Content-Disposition: inline
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
--
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein [at] postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein
--------------060802010108080003070301--
Re: Pattern Matching
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
--
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein [at] postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein
Re: Pattern Matching
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.wordpres s.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
--
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein [at] postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein