Обсуждение: Escaping regular expressions in plperl
How should one escape regular expressions in plperl? In the following chunk of PlPerl code the date doesn't match the regex: my $endby = '2009-06-13'; my $t = spi_exec_query(qq|SELECT CASE WHEN '$endby' ~ E'.*\\d\\d\\d\\d \\-\\d\\d?\\-\\d\\d?.*' THEN '$endby'::timestamptz ELSE CURRENT_DATE::timestamptz END AS test|); die "$t->{rows}[0]{test}"; However, when I run the following query using PgAdmin, the date DOES match the regex. SELECT CASE WHEN '$endby' ~ E'.*\\d\\d\\d\\d\\-\\d\\d?\\-\\d\\d?.*' THEN '$endby'::timestamptz ELSE CURRENT_DATE::timestamptz END AS test
Toomas Vendelin <pg@vendelin.com> writes: > In the following chunk of PlPerl code the date doesn't match the regex: > my $endby = '2009-06-13'; > my $t = spi_exec_query(qq|SELECT CASE WHEN '$endby' ~ E'.*\\d\\d\\d\\d > \\-\\d\\d?\\-\\d\\d?.*' > THEN '$endby'::timestamptz ELSE CURRENT_DATE::timestamptz END AS > test|); Backslash is an active escape character in qq constants, no? You'd need to double all those backslashes, or choose a different quoting method for the query. (And I hope this is all encased in dollar quoting for the function body...) regards, tom lane