2009/12/18 Tarcísio Sassara <sassara.tarci...@gmail.com>:
> 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
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a