database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 38449 게시물 읽기
No. 38449
정규식 질문 드립니다.
작성자
전현욱(halmac)
작성일
2011-03-18 14:16
조회수
4,335

막상 하려니 잘 안되서 도움을 받고자 합니다.

"성균관"이라 함은 조선시대 대학을 말한다.

"성균관"이란 조선시대 대학을 말한다.

 

 

텍스트를 정규표현식으로 해서 " " 안의 값과 ~라 함은(또는 란) 뒤의 값으로 분리해서 추출하고자 합니다.

근데 잘 표현이 안되는 부분이 ~라 함은 / ~란 두 문자열중에 하나가 나와라... 라는 표현을 제대로 할 수가 없네요...

[이]?[라 함은|란] ==> 으로 하니.. 결과가 다르고

[이]?(라 함은|란) ==> 으로 하니... \1, \2, \3 값 등에 쓸데없는 "라 함은" 값이 봅혀버리고...

[이]?라 함은|란 ==> 으로 하니.. 결과가 다르고...

결국 제대로된 형태를 찾지 못해서 질문드립니다. 문자열과 문자열 둘중에 하나가 나와라 라는 표현을 어떻게 해야 하나요...

 

WITH  TABLE_A AS (
SELECT  1 AS NUM, '"성균관"이라 함은 조선시대 대학을 말한다.' AS TXT FROM DUAL UNION ALL
SELECT  2 AS NUM, '"성균관"란 조선시대 대학을 말한다.' AS TXT FROM DUAL UNION ALL
SELECT  3 AS NUM, '"성균관"이라 함은 조선시대 대학을 말한다' AS TXT FROM DUAL UNION ALL
SELECT  4 AS NUM, '"성균관"란 조선시대 대학을 말한다' AS TXT FROM DUAL UNION ALL
SELECT  5 AS NUM, '성균관이라 함은 조선시대 대학을 말한다.' AS TXT FROM DUAL UNION ALL
SELECT  6 AS NUM, '“성균관”이 시청함.' AS TXT FROM DUAL UNION ALL
SELECT  7 AS NUM, '“성균관"이라 함은 조선시대 대학을 말한다.' AS TXT FROM DUAL UNION ALL
SELECT  8 AS NUM, '"성균관”이라 함은 조선시대 대학을 말한다.' AS TXT FROM DUAL UNION ALL
SELECT  9 AS NUM, '"성균관"이라 함은 조선시대 대학을 말한다."강아지"라 함은 개새끼를 말한다.' AS TXT FROM DUAL UNION ALL
SELECT  10 AS NUM, '"성균관"이라 함은 조선시대 대학을 말한다."강아지"란 개새끼를 말한다.' AS TXT FROM DUAL UNION ALL
SELECT  11 AS NUM, '"성균관"이라 함은 조선시대 대학을 말한다."강아지"란 개새끼를 말한다' AS TXT FROM DUAL UNION ALL
SELECT  12 AS NUM, '“성균관"이라란 조선시대 대학을 말한다.' AS TXT FROM DUAL
)
, TABLE_B AS (
SELECT  '[\"|“]([^\"]*)[\"|”][이]?(라 함은|란) (.+[.|>| ])$' AS PATTERN FROM DUAL
)
SELECT  NUM, TXT
      , REGEXP_REPLACE(TXT, PATTERN, '\1', 1) AS REPLACE21
      , REGEXP_REPLACE(TXT, PATTERN, '\2', 1) AS REPLACE22
      , REGEXP_REPLACE(TXT, PATTERN, '\3', 1) AS REPLACE23
      , REGEXP_REPLACE(TXT, PATTERN, '\4', 1) AS REPLACE24
      , REGEXP_REPLACE(TXT, PATTERN, '\5', 1) AS REPLACE24
  FROM  TABLE_A
      , TABLE_B
 WHERE  1=1
--   AND  REGEXP_LIKE(TXT, PATTERN)
ORDER BY  NUM
;

 

이 글에 대한 댓글이 총 1건 있습니다.

질문이 좀더 명확해야 할것 같습니다.
첫 단어는 따옴표로 명확하게 구별이 될듯 합니다.
그 다음 설명 부분은 어디까지를 잘라야 하나요?
뒷부분 전체 다인지? 마침표 부분에서 끊어야 하는지?
~을 말한다.로 끝나는 것만 찾는 것인지? 다른 경우도 나와야 하는지?
성균관과 강아지 두 문장이 연속으로 오는 경우는 어떤 결과가 나와야 하는지?
좀 더 다양한 예제로부터 원하는 결과예시까지 있었음 하네요.


일단 참고로 | 은 or 의 역할을 하지만
[] 안에서는 or 가 아닌 | 문자 그대로입니다.
[] 이 표현식 자체가 이 안에 있는 문자들이 모두 or 로 연결된것과 마찬가지입니다.
따라서 ["“”] 이렇게 쓰시면 ( " 이거나 “ 이거나 ” ) 의 의미가 됩니다.

마농(manon94)님이 2011-03-18 14:56에 작성한 댓글입니다.
이 댓글은 2011-03-18 15:29에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
38453VIEW를 만들었는데 조회날짜가 매일바뀝니다. [1]
강영호
2011-03-18
3585
38452A, B 테이블의 값을 비교해서 A 테이블에 값이 있으면 update, 없으면 A 테이블 insert 해야 합니다. 도와주세요. [2]
초보
2011-03-18
4041
38450쿼리 세로 출력 문의 [2]
초보입니다.
2011-03-18
4128
38449정규식 질문 드립니다. [1]
전현욱
2011-03-18
4335
3844864비트 windwos2008Server에 오라클 64비트/32비트 설치
Help!
2011-03-17
4143
38445쿼리 질문 올립니다. 답변좀 부탁드릴게요 [1]
쿼리질문
2011-03-17
4323
38443[질문]참조키 분석을 한꺼번에 볼수 있는지요
안동석
2011-03-17
3664
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다