오라클 regexp_like 정사각형 브래킷 안에 문자 집합입니다
-
28-09-2020 - |
문제
이 질문은 Oracle, PL / SQL 및 regexp_like 함수와 관련됩니다.
모든 전형적인 특수 문자에 일치하는 문자 집합을 작성하려고합니다.내 문자 집합은 현재 다음과 같습니다 :
pattern := '[-~`!@#$%^&*\(\)\\{}_+=|''";:,./?]+';
.
이 문자 집합에 대괄호를 추가하고 싶습니다. 그러나 내가 추가하려고하는 일은 무엇이든간에 ']'가 작동하지 않습니다.다음은 문제점을 보여주는 간단한 예입니다.
select
case when regexp_like('w]ord', '[\]]+') then 'true'
else 'false' end
from dual;
.
이것은 false를 반환하므로 ']'문자와 일치하지 않는 의미입니다.흥미롭게도, 나는 이것이 true를 반환하기 때문에 '['문자를 일치시킬 수 있습니다 :
select
case when regexp_like('w[ord', '[\[]+') then 'true'
else 'false' end
from dual;
. 해결책
백 슬래시가 브래킷 내에 특별한 의미가 있다고 생각하지 않습니다.regexp_like('a]b','[]]')
또는 or
: regexp_like('a]b','([whatever]|\])')
를 사용할 수 있습니다.
regexp_like('a]b','[^[:alnum:]]')
를 사용할 수없는 이유는 무엇입니까?
다른 팁
왜 SQL 언어 참조 , 부록 D, Oracle 정규 표현식 지원 :
[]
목록에 표시된 표현식과 일치 해야하는 일치 목록을 지정하는 브래킷 표현식.일치하지 않는 목록 표현식은 circumFlex (^)로 시작하여 목록에 표시된 표현식을 제외한 모든 문자와 일치하는 목록을 지정합니다.
브래킷 표현식에서 오른쪽 브래킷 (])을 지정하려면 먼저 목록에 올려 놓습니다 (초기 곡절 (^), IF).
브래킷 표현식에서 하이픈을 지정하려면 먼저 목록에 먼저 배치하십시오 (^), 목록에서 마지막으로 또는 범위 표현식의 끝 범위 점으로 표시됩니다.