program story

Oracle의 정규식에서 그룹을 추출하는 방법은 무엇입니까?

inputbox 2021. 1. 11. 08:08
반응형

Oracle의 정규식에서 그룹을 추출하는 방법은 무엇입니까?


이 쿼리를 받았으며 괄호 사이의 값을 추출하고 싶습니다.

select de_desc, regexp_substr(de_desc, '\[(.+)\]', 1)
from DATABASE
where col_name like '[%]';

그러나 "[TEST]"와 같은 대괄호로 값을 제공합니다. 난 그냥 "테스트"를 원합니다. 쿼리를 가져 오려면 어떻게 수정합니까?


REGEXP_SUBSTR 함수의 세 번째 매개 변수는 de_desc검색을 시작할 대상 문자열 ( :)의 위치를 ​​나타냅니다 . 문자열의 지정된 부분에서 일치하는 항목이 있다고 가정하면 반환되는 항목에 영향을주지 않습니다.

Oracle 11g에는 함수에 대한 여섯 번째 매개 변수가 있습니다.이 매개 변수는 반환하려는 캡처 그룹을 나타내는 사용하려는 것입니다. 적절한 사용의 예는 다음과 같습니다.

SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;

마지막 매개 변수 1는 반환 할 캡처 그룹의 번호를 나타냅니다. 다음은 매개 변수를 설명하는 문서에 대한 링크 입니다.

10g에는이 옵션이없는 것으로 보이지만 귀하의 경우 다음을 사용하여 동일한 결과를 얻을 수 있습니다.

select substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual
);

경기의 시작과 끝에 정확히 하나의 초과 문자가 있다는 것을 알고 있기 때문입니다. (또는 RTRIM 및 LTRIM을 사용하여 결과의 ​​양쪽 끝에서 대괄호를 제거 할 수 있습니다.)


교체를 수행하고 전체 문자열과 일치하는 정규식 패턴을 사용해야합니다.

select regexp_replace(de_desc, '.*\[(.+)\].*', '\1') from DATABASE;

참조 URL : https://stackoverflow.com/questions/7758859/how-to-extract-group-from-regular-expression-in-oracle

반응형