2017-10-25 1 views
1

다음 문자열을 모든 문자가 한 행의 단어 (예 : a, i) :PostgreSQL - regexp_split_to_table을 사용하여 행으로 단어 분할 (len> 1)

"the quick brown fox jumps over a lazy dog" 

이 내가 SQL 바이올린에 덤비는했습니다 것입니다,하지만 올바른 결과를 얻을 수 없습니다

SELECT foo FROM regexp_split_to_table('the quick brown fox jumps over a lazy dog', 
    E'(\\s+)(?=\\w{2,})') AS foo; 

결과 :

the 
quick 
brown 
fox 
jumps 
over a 
lazy 
dog 

거의 정확하지만 어떤 이유로 a가 끝났습니다. 나는 완전히 무시하고 싶다.

실종 된 점은 무엇입니까?

+0

을'foo는 SELECT? <= \\ w {2,}) (? = \\ w {2,}) ') AS foo;'? – Abdou

+2

'regexp_split_to_table을 선택하십시오 ('게으른 개를 뛰어 다니는'\ s + (\ w \ s +) * ');' – Abelisto

+0

@Abelisto 감사합니다! 아주 좋아. –

답변

1

이미 코멘트에서 제공하는 하나 개의 솔루션 :

이 계정 문장 부호에 필요하지 않습니다 그러나
select regexp_split_to_table('the quick brown fox jumps over a i lazy dog.', '\s+(\w\s+)*'); 

. 그래서 그 대신 구분자 (들) 당신이 regexp_matches() 기능을 사용하여 그것에서 단어를 추출하는 위선적 인 말투로 문자열을 분할하는 : regexp_split_to_table (E '('빠른 갈색 여우가 게으른 개 이상 점프 'FROM

postgres=# select (regexp_matches('the quick brown fox;jumps over, a lazy dog.', '(\w{2,})', 'g'))[1]; 
-- or 
postgres=# select unnest(regexp_matches('the quick brown fox;jumps over, a lazy dog.', '(\w{2,})', 'g')); 
┌────────────────┐ 
│ regexp_matches │ 
╞════════════════╡ 
│ the   │ 
│ quick   │ 
│ brown   │ 
│ fox   │ 
│ jumps   │ 
│ over   │ 
│ lazy   │ 
│ dog   │ 
└────────────────┘