SELECT REGEXP_SUBSTR ('testtesttest','(.*)\1') AS TEST
FROM DUAL;
위를 출력할 때 값이
testtest 가 출력되는 이유가 무엇인가요 ?
제가 알기로는 \1은 앞의 서브표현식인 (.*)을 그대로 쓰는거라고 생각해서
SELECT REGEXP_SUBSTR ('testtesttest','(.*)(.*)') AS TEST
FROM DUAL;
와 동일하다고 생각했는데, 위 쿼리문 결과 값은
testtesttest 가 출력이 됩니다.
혹시 이유를 알 수 있을까요 ?
SELECT REGEXP_SUBSTR ('abxab' , '(ab|cd)x\1') AS C1
FROM DUAL;
위 쿼리는 제 생각대로
SELECT REGEXP_SUBSTR ('abxab' , '(ab|cd)x(ab|cd)') AS C1
FROM DUAL;
로 변환해서 쿼리문을 실행하면
결과가 abxab 로 동일한 결과값이 나옵니다.
그런데 (.*) 표현식만 저런식으로 제가 생각한 방식과 다르게 나옵니다 .
정말 이것저것 검색해봤는데 의문이 풀리지 않아 질문합니다 ..
표현식 패턴이 달라서 다른 결과가 나오는게 맞는거 같아요.
SELECT 1 ,REGEXP_SUBSTR ('testtesttest','(.*)test\1') AS TEST1 ,REGEXP_SUBSTR ('testtesttest','(.*)test(.*)') AS TEST2 ,REGEXP_SUBSTR ('testtesttest','(test|aaa)test\1') AS TEST3 ,REGEXP_SUBSTR ('testtesttest','(test|aaa)test(test|aaa)') AS TEST4 ,REGEXP_SUBSTR ('abxab' , '(ab|cd)x\1') AS C1 ,REGEXP_SUBSTR ('abxab' , '(ab|cd)x(ab|cd)') AS C2 FROM DUAL;