Thread: PL/TCL regex string matching

PL/TCL regex string matching

From
Marcin Mazurek
Date:
Hi,
I'm trying to write a TCL function which uses regex string matching.
    spi_exec "SELECT count(s.id)  as res FROM services s
                    WHERE
                s.name=''email account ([0-9+])MB''";

I'd like to match any service with name starting "email account " and quota
at the end.
I was trying to use ([0-9+]), (1,2) and some others that I've found in TCL
guides.
Is it possible to use regex in PL/TCL and can You show me with the exmaple
how?

tia
mazek


Marcin Mazurek

--
Kierownik Działu Systemowego
MULTINET SA o/Poznan
http://www.multinet.pl/

Re: PL/TCL regex string matching

From
"Robert B. Easter"
Date:
On Monday 20 November 2000 12:16, Marcin Mazurek wrote:
> Hi,
> I'm trying to write a TCL function which uses regex string matching.
>     spi_exec "SELECT count(s.id)  as res FROM services s
>                     WHERE
>                 s.name=''email account ([0-9+])MB''";
>
> I'd like to match any service with name starting "email account " and quota
> at the end.
> I was trying to use ([0-9+]), (1,2) and some others that I've found in TCL
> guides.
> Is it possible to use regex in PL/TCL and can You show me with the exmaple
> how?
>
> tia
> mazek
>
>
> Marcin Mazurek

These links might be useful:
http://www.postgresql.org/docs/aw_pgsql_book/node52.html
http://www.scriptics.com/man/tcl8.4/TclCmd/regexp.htm

Pg uses '~' as the regexp operator, so you can try that instead of the '='.
Check the first link to see the other pg regexp operators, there are four of
them.

--
-------- Robert B. Easter  reaster@comptechnews.com ---------
- CompTechNews Message Board   http://www.comptechnews.com/ -
- CompTechServ Tech Services   http://www.comptechserv.com/ -
---------- http://www.comptechnews.com/~reaster/ ------------

Re: PL/TCL regex string matching

From
Tom Lane
Date:
"Robert B. Easter" <reaster@comptechnews.com> writes:
> These links might be useful:
> http://www.postgresql.org/docs/aw_pgsql_book/node52.html
> http://www.scriptics.com/man/tcl8.4/TclCmd/regexp.htm

> Pg uses '~' as the regexp operator, so you can try that instead of the '='.

Pg's regexp package is pretty old and limited --- I believe it just
implements some POSIX spec or other, not all the fancy stuff you find
in TCL or Perl regexps nowadays.

If you need some non-POSIX regexp feature, try making a TCL regexp
function, say

create function tcl_regexp(text,text) returns bool as
'regexp -- $1 $2' language 'pltcl';

Then you use this in SQL queries like

    SELECT ... WHERE tcl_regexp('pattern', variable);

In general, pltcl or plperl make great implementation languages for
text-mashing functions, so I don't feel any big hurry to improve
our built-in SQL functions to try to equal them...

            regards, tom lane