PL/TCL regex string matching

Started by Marcin Mazurekover 25 years ago3 messagesgeneral
Jump to latest
#1Marcin Mazurek
M.Mazurek@poznan.multinet.pl

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/

#2Robert B. Easter
reaster@comptechnews.com
In reply to: Marcin Mazurek (#1)
Re: PL/TCL regex string matching

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/ ------------

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert B. Easter (#2)
Re: PL/TCL regex string matching

"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