2014-09-16 13 views
0

의 내가 파일 이름은 다음 표 (라고 filetable) 있다고 가정 해 봅시다 :패턴 (포스트 그레스)

file 
something.h 
something.cc 
somethingelse.js 
something.py 
something.xkh 
something.jpeg 

내가 다음 쿼리를 시도를 :

select file 
    from filetable 
    where file ~ E'\.[cc|h|js|py]'; 

쿼리 출력 :

file 
something.h 
something.cc 
somethingelse.js 
something.py 
something.xkh 
something.jpeg 

그러나 나는 .cc, .h, .js, .py로 정확히 끝나는 파일 만 필요합니다. 이 쿼리를 향상시키는 방법은 무엇입니까?

답변

4

이 정규식 :

\.[cc|h|js|py] 

은 당신이하지 생각하지 않습니다. []는 문자 클래스 그렇게 [cc|h|js|py]문자 'c', 'h', 'j', 'p', 's', 'y''|'보다는 일치시킬 네 개의 확장과 일치합니다. 그런 다음 그 네 개의 확장과 일치 할 경우에 당신은 그룹에 교대를 괄호를 사용하려면 :

\.(cc|h|js|py) 

을 당신이 그것을 원하지 않을 때 일 'pancakes.html' 일치합니다, 그래서 당신은 또한 당신의 정규식을 고정 아닙니다. 당신은 $을 추가하여 문자열의 끝 부분에 패턴을 고정하는 것으로 해결할 수 있습니다 :

\.(cc|h|js|py)$ 

그리고 당신의 문자열 (예 : \n 같은) 어떤 C 스타일 이스케이프 시퀀스를 포함하지 않는 그래서 당신은 필요가 없습니다 E 접두사 :

where file ~ '\.(cc|h|js|py)$' 
+0

그것은 매력처럼 작동했습니다. 감사, –