2016-07-29 1 views
2

나는 포스트 그레스 기능에 다음 줄을 사용하고 있습니다 :포스트 그레스 잘못된 정규 표현식 : 잘못된 문자 범위

regexp_replace(input, '[^a-z0-9\-_]+', sep, 'gi');

하지만 그것을 사용하려고하면 내가 ERROR: invalid regular expression: invalid character range 얻고있다. 정규 표현식은 Ruby에서 잘 작동합니다. 포스트 그레스에서 다를 이유가 있습니까?

+0

모르겠지만 내가 너라면 나는 문자 클래스 끝에 하이픈을 넣으려고 할 것이다. 그렇지 않으면 두 번 이스케이프하려고 시도 할 것이다. –

+1

오류없이 실행합니다. 나머지 코드를 제공 할 수 있습니까? – Nicarus

+0

이 게시물은 유용 할 수 있습니다 : http://stackoverflow.com/questions/12069639/postgres-regex-issue –

답변

4

일부 정규 표현식 파서는 중간에 대시 (-)로 표시됩니다. 범위를 벗어난 경우에는 다른 대다수는 그렇지 않습니다. 나는 postgres regexp 파서가 나중의 클래스에 있다고 생각한다. 정규 표현식에서 대시를 사용하는 표준 방법은 정규 표현식을 '[^-a-z0-9_]+'으로 변경하여 구문 분석기를 지나치게 만드는 것입니다. 그러나 일부 regexp 파서는 정말 까다 롭고 받아 들일 수 없습니다.

나는 테스트 할 postgres이 없지만 위의 정규식을 수락하고 제대로 처리 할 것으로 기대합니다. 그렇지 않다면 매뉴얼의 정규 표현식 부분을 찾아 내고 그에 대한 내용을 이해해야합니다.

+0

대시'-'는 다른 영숫자가 아닌 리터럴과 완전히 다른가요? 아마 그것은 도피를 전혀 받아들이지 않습니다. 실제로'[^ a-z0-9 -_]'는 범위 연산자의 컨텍스트 밖에있을 때 유효한 대시 리터럴을 포함합니다. – sln