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