2008년 6월 27일 금요일

정규표현식

1. 반복 메타 문자

* : 0회이상 반복
+ : 1회이상 반복
? : 0회 혹은 1회
{m} : m회 반복
{m,n} : m회 부터 n회까지 반복

2. 매칭 메타문자

. : 줄바꿈 문자를 제외한 모든 문자와 매치
^ : 문자열의 시작과 매치, [] 메타 기호안에서는 반대의 문자열
$ : 문자열의 마지막과 매치, [] 메타 기호안에서는 순수한 $문자로 매치
[] : 문자 집합, - 는 범위
| : or
() : 그룹으로 묶음

3. 이스케이프 기호

\\ : 역슬래쉬 문자
\d : 모든 숫자와 매치 [0-9]
\D : 숫자가 아닌 문자와 매치 [^0-9]
\s : 화이트 스페이스 문자와 매치 [\t\n\r\f\v]
\S : 화이트 스페이스 문자가 아닌 것과 매치 [^\t\n\r\f\v]
\w : 숫자 또는 문자와 매치 [a-zA-Z0-9]
\W : 숫자 또는 문자가 아닌것과 매치 [^a-zA-Z0-9]
\b : 단어의 경계를 표시, 영문자 혹은 숫자의 연속 문자열로 가정
\B : \b의 반대로 단어의 경계가 아님을 표시

4. 최소 매칭을 위한 정규식

*? : *와 같으나 문자열을 최소로 매치
+? : +와 같으나 문자열을 최소로 매치
?? : ?와 같으나 문자열을 최소로 매치
{m,n}? : {m,n}과 같으나 문자열을 최소로 매치

열혈강의 파이썬 정규식에서 발췌.

oracle query tip

oralce desc script

select a.COLUMN_NAME, '\t'), nvl(decode(A.NULLABLE,'N', 'NO', 'YES'), a.DATA_TYPE||'('||DECODE(a.DATA_TYPE,'NUMBER',a.DATA_PRECISION, a.DATA_LENGTH)||')', b.COMMENTS,
from   USER_TAB_COLUMNS a, USER_COL_COMMENTS b
where  a.TABLE_NAME = 'TEST'
and a.TABLE_NAME = b.TABLE_NAME
and    a.COLUMN_NAME = b.COLUMN_NAME
ORDER BY a.TABLE_NAME, COLUMN_ID

oracle table script

SELECT  DBMS_METADATA.GET_DDL('TABLE',TABLE_NAME,OWNER)
DBMS_METADATA.GET_DEPENDENT_DDL('INDEX',TABLE_NAME,OWNER),
DBMS_METADATA.GET_DEPENDENT_DDL('COMMENT',TABLE_NAME,OWNER)
FROM DBA_TABLES
WHERE OWNER = 'OWNER'
AND TABLE_NAME = 'TEST'

perl로 스트립트를 만드는데 table script는 lob관련 에러가 났다.
oracle connect 후에 추가한다.

$dbh->{LongReadLen} = 512 * 1024;
$dbh->{LongTruncOk} = 1;

그리고 Wide character in print 관련 warnning은
binmode STDOUT, ':utf8';
를 추가하면된다.