그 regexp는 PostgreSQL 버전과 standard_conforming_strings
값에 따라 실제로 두 가지를 의미 할 수 있습니다.
이전 버전 (standard_conforming_strings
이전 또는 기본값이 off 인 문자열)은 문자열을 백 슬래시 이스케이프 문자열로 해석합니다. 따라서 PostgreSQL은 \\+\\+*
을 \+\+*
으로 변환합니다. 즉, 이스케이프 수준을 사용합니다. 그런 다음 정규 표현식은 나머지 레벨을 소모하여 플러스 문자를 이스케이프 처리하므로 정규화자가 아닌 리터럴 + s로 해석됩니다. 그 정규 표현식은 ++ 다음에 0 이상의 다른 문자이옵니다.
standard_conforming_strings
이 기본값 인 최신 버전은 on
으로 기본 설정되어 있으며 SQL 표준에 따라 백 슬래시를 이스케이프로 디코딩하지 않습니다. 따라서 \\+\\+*
을 실행하면 하나 이상의 백 슬래시 뒤에 하나 이상의 백 슬래시가오고 그 뒤에 ... oops가 나오며 선행 문자가없는 별표는 오류입니다.
우리는 당신이 standard_conforming_strings
을 가지고 있어야한다는 것을 알고 있습니다. '새로운 쿼리에서 정규 표현식을 컴파일하지 못해서.
나중에이 문제가 발생하므로 업그레이드하기 전에이 문제를 해결할 것을 권합니다.가 흑자로 시작하지 않으면
x_spam_level LIKE '++%'
사용 : 다음 x_spam_level
필드는 항상 정규 표현식은 확인하지 않습니다 흑자로 시작한다고 가정
은
, 그 코드는 더 나은로 기록 될 수 있습니다
x_spam_level LIKE '%++%'
현재 정규 표현식이 수행하는 작업입니다. PostgreSQL은이를 내부적으로 정규 표현식으로 변환 할 것이지만, 여러분은 탈출에 대해 걱정할 필요가 없습니다.
정규 표현식을 사용하고자하고 모든 버전에서 consisently 행동이있는 경우
는 사용
x_spam_level ~ E'\\+\\+*'
E''
구문에 관계없이 standard_conforming_strings
설정, 탈출 백 슬래시를 디코딩 PostgreSQL을 알려줍니다.
정규식처럼 보이는 [tag : postgresql] 태그를 추가했습니다. 태그가 틀린 경우 변경할 수 있습니다. – cmbuckley
여기에는 'standard_conforming_strings' 매개 변수의 값과 마찬가지로 PostgreSQL 버전이 중요합니다. 그것은 두 개 이상의 \ s ('standard_conforming_strings = on') 또는'++'('standard_conforming_strings = off')로 시작하는 것을 찾기 위해 기이하게 표현 된 정규 표현식 일 수 있습니다. –