2009/12/18 Tarcísio Sassara <[email protected]>:
> Estou tentando pegar todas as ocorrências dentro de um padrão e está
> complicado.
>
> São palavras limitadas nos dois lados com um hífen "-".
>
> Tentei usar desta forma a função regexp_matches():
>
> select regexp_matches('-MARIA- -JOAO- -PEDRO-', '-(.*)-')
>
> Esperando retornar: {"MARIA", "JOAO", "PEDRO"}
>
> Mas estou recebendo {"MARIA- -JOAO- -PEDRO"}
>
> Isso porque:
> O primeiro traço da minha expressão está casando com o primeiro traço da
> string.
> O ultimo traço está casando com o ultimo da string.
>
> Esperava casar com a primeira ocorrência logo
> após a primeira palavra MARIA e assim ir construindo o vetor com os nomes.
>
Da forma abaixo o primeiro e último elemntos do array são strings de
comprimento zero:
bdteste=# select regexp_split_to_array('-MARIA- -JOAO- -PEDRO-', E'-( -)?');
regexp_split_to_array
--------------------------
{"",MARIA,JOAO,PEDRO,""}
(1 registro)
Uma possível maneira de evitar isso seria eliminar o '-' do início e
fim antes de tratar:
bdteste=# select regexp_split_to_array(regexp_replace('-MARIA- -JOAO-
-PEDRO-','^-(.*)-$',E'\\1'), E'- -');
regexp_split_to_array
-----------------------
{MARIA,JOAO,PEDRO}
(1 registro)
Deve existir uma maneira mais elegante.
Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral