正则表达式将不需要的花括号添加到匹配的字符串
regex adds unwanted curly braces to matched strings
当我使用正则表达式匹配部分字符串时,匹配的结果返回时带有花括号,即使示例字符串不包含任何花括号。
以plpgsql为例:
CREATE OR REPLACE PROCEDURE somename()
LANGUAGE plpgsql
as $$
DECLARE
stage_x text;
testing text;
BEGIN
SELECT 'x' INTO stage_x;
RAISE NOTICE 'x is: %', stage_x; -- SHOWS ONLY x
regexp_matches(stage_x, '\w+') INTO regex_test;
RAISE NOTICE 'test is: %', regex_test; -- NOW IT SHOWS {x}
...
如何避免 adding/remove 花括号?
regexp_matches()
returns 所有匹配项的 数组 。您看到的大括号只是 Postgres 中数组的默认输出格式。当您将变量定义为 text
时,Postgres 会自动将数组转换为字符串,这就是您获得大括号的原因。
如果您对所有比赛都感兴趣,您可以将变量定义为text[]
。
如果您只对第一场比赛感兴趣,那么就使用它:
CREATE OR REPLACE PROCEDURE somename()
LANGUAGE plpgsql
as $$
DECLARE
stage_x text;
testing text;
BEGIN
stage_x := 'x';
RAISE NOTICE 'x is: %', stage_x; -- SHOWS ONLY x
regex_text := (regexp_matches(stage_x, '\w+'))[1]; --<< [1] picks the first array element
RAISE NOTICE 'test is: %', regex_test;
...
你不应该使用 SELECT
在 PL/pgSQL 中做简单的赋值,那真的很慢。请改用 :=
将变量分配给单个函数调用的结果或值。
当我使用正则表达式匹配部分字符串时,匹配的结果返回时带有花括号,即使示例字符串不包含任何花括号。 以plpgsql为例:
CREATE OR REPLACE PROCEDURE somename()
LANGUAGE plpgsql
as $$
DECLARE
stage_x text;
testing text;
BEGIN
SELECT 'x' INTO stage_x;
RAISE NOTICE 'x is: %', stage_x; -- SHOWS ONLY x
regexp_matches(stage_x, '\w+') INTO regex_test;
RAISE NOTICE 'test is: %', regex_test; -- NOW IT SHOWS {x}
...
如何避免 adding/remove 花括号?
regexp_matches()
returns 所有匹配项的 数组 。您看到的大括号只是 Postgres 中数组的默认输出格式。当您将变量定义为 text
时,Postgres 会自动将数组转换为字符串,这就是您获得大括号的原因。
如果您对所有比赛都感兴趣,您可以将变量定义为text[]
。
如果您只对第一场比赛感兴趣,那么就使用它:
CREATE OR REPLACE PROCEDURE somename()
LANGUAGE plpgsql
as $$
DECLARE
stage_x text;
testing text;
BEGIN
stage_x := 'x';
RAISE NOTICE 'x is: %', stage_x; -- SHOWS ONLY x
regex_text := (regexp_matches(stage_x, '\w+'))[1]; --<< [1] picks the first array element
RAISE NOTICE 'test is: %', regex_test;
...
你不应该使用 SELECT
在 PL/pgSQL 中做简单的赋值,那真的很慢。请改用 :=
将变量分配给单个函数调用的结果或值。