Thread: regex in plpgsql function

regex in plpgsql function

From
Culley Harrelson
Date:
I am using 7.4.1

Basically I am trying to use a regex that will match:

john smith
john r smith
john r. smith

When I use:

siteadmin=# select 'john r. smith' ~ '^\\w+\\s+\\w?\\.?\\s?\\w+$';
 ?column?
 ----------
  t
  (1 row)

all is well but:

CREATE OR REPLACE FUNCTION f_tmp(TEXT) RETURNS BOOLEAN AS ' --{{{

    BEGIN
        RETURN $1 ~ ''^\\w+\\s+\\w?\\.?\\s?\\w+$'';
    END;
' language 'plpgsql';

siteadmin=# select f_tmp('john r. smith');
 f_tmp
 -------
  f
  (1 row)

makes the same regex seem to behave differently.  What am I doing wrong?

culley

Re: regex in plpgsql function

From
Bruno Wolff III
Date:
On Thu, Jan 22, 2004 at 09:36:14 -0800,
  Culley Harrelson <culley@fastmail.fm> wrote:
>
> makes the same regex seem to behave differently.  What am I doing wrong?

I think you have to double the \s again in the function so that there
are 4 \s for each \ in the RE.

Re: regex in plpgsql function

From
Culley Harrelson
Date:
>
> I think you have to double the \s again in the function so that there
> are 4 \s for each \ in the RE.

Thanks.  This worked:

RETURN $1 ~
''^[[:alnum:]_]+[[:space:]]+[[:alnum:]_]?\\.?[[:space:]]?[[:alnum:]_]+$'';