AND

http://www.thescripts.com/forum/thread256146.html
Process.Start (@"C:\Program Files\");
AND

메시징큐

DEVELOP/C# 2007. 7. 30. 21:35
AND

격차사회 발표자료

AND

리눅스 명령어 모음

ETC 2007. 5. 17. 15:58
 

유닉스 및 리눅스 명령어 팁



1. 서브 디렉토리까지 파일안의 문자열 모두 검색
find ./ -name "*" -exec grep 'abc' {} ; -print
find . -name -print -exec grep abc {} ;
grep -r abc *


2. haha와 huhu가 동시에 들어있는 행 뽑기
grep haha foo.txt | grep huhu


3. 찾아서 지우기
find / -name "*.eml" -exec rm -f {} ;


4. 공사중에 로그인 막기
/etc/nologin 이라는 파일을 만들어,공사중 또는 Under Construction이라는 공지를 넣으면 됨


5. 크기가 가장 큰 파일, 디렉토리 찾기
du -S | sort -n


6. 가장 큰 파일을 찾으려면
ls -lR | sort +4n


7. 현재 디렉토리의 크기만을 파악할때
# du -c -h --max-depth=0 *


8. 시스템 정보 감추기
/etc/inetd.conf 파일을 열어서,

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h


9. 어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기
ps -aux | sort +4n 또는 ps -aux | sort +5n


10. FTP로 들어온 사용자 확인하기
ftpwho,ftpcount


11. 원하지 않는 사용자 죽이기
skill -KILL sunny
위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다.
그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠? 그럴때는


skill -KILL -v pts/14
이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다.


12. less 결과를 vi로 보기
less상태에서 v를 누르면 바로 vi로 감


13. vi에서 블럭 설정하기
alt+v 하면, 라인 단위로 블럭 설정을 할 수 있으며, 해제 하시려면 Esc를 누르면 됩니다.
또한 ctl+v를 하시면, 블럭 단위로 블럭을 설정하실 수 있습니다. 블럭을 설정 하신 뒤,

삭제를 하려면 x 복사를 하려면 y 붙여넣기는 p


14. man 페이지 프린트하기
man -t vi 0.0.0.15 ping 무시하기
echo 1 0.0.0.16 LILO 다시 살리기
boot : vmlinuz root=/dev/hda6


17. 특정 사용자 ftp 접근 막기
/etc/ftpusers 파일에 로그인 네임을 추가하면 됩니다.


18. X 윈도우에서 TV보기
리눅스에서 TV보기 위해서는 드라이버 파일과 TV를 보는 프로그램이 필요합니다.
이 글에서는 미지 리눅스 OS에 탑재된 bttv 칩셋을 사용하는 TV 카드를 기준으로 설명합니다.
만일 커널을 새로 컴파일 하실 분은 반드시 Character devices -

alias char-major-81 bttv
# 필립스 튜너의 경우 pre-install bttv modprobe -k tuner # 알프스 튜너의 경우 pre-install bttv modprobe -k tuner type=9

이제 kwintv나 xawtv 등의 TV 시청 프로그램으로 TV를 볼 수 있습니다. 만약 TV 장치를 찾지 못하는 오류가 있다면 bttv driver 디렉토리에 포함된 MAKEDEV 를 실행하십시오.


19. ls라는 파일이 포함된 rpm패키지 찾기
일단 ls의 절대경로를 알아야 한다. which lswhich로 알아낸 ls의 절대경로로 rpm질의를 한다.

rpm -qf /bin/ls
[root@piruks /etc]# which ls
/bin/ls
[root@piruks /etc]# rpm -qf /bin/ls
fileutils-4.0i-2mz


20. 현재 rpm패키지의 의존패키지
rpm -qR 패키지명


21. 현재 디렉토리크기
du -h --max-depth=1 .


22. 바로 이전 디렉토리로 가기
cd -


 

23. 프로세스명으로 프로세스 죽이기
killall 프로세스명
kill -9 `pidof 프로세스명


 

24. 하드웨어 시계맞추기
배포본을 설치하고 나면 시간이 맞지 않는 경우가 많다. 간단히 어느정도 정확한 시간을 설정하는 방법이다.

[root@dev /down]# rdate -s time.kriss.re.kr
[root@dev /down]# clock -w


 

25. 원격에서 리모트서버의 X application실행시
X윈도 app를 실행할때 다음과 같은 에러가 나면 조치

[kang@dev /home/kang] xclock
Xlib: connection to "211.222.186.170:0.0" refused by server
Xlib: Client is not authorized to connect to Server
Error: Can't open display: 211.222.186.170:0.0
export DISPLAY=211.222.186.170:0
xhost +211.222.186.170


 

26. 링크 파일
ln -sf 링크할디렉토리 링크로 만들어질 디렉토리 참고로 링크를 걸기만 한다고 접근가능한것은 아니고,링크가 걸린 디렉토리의 퍼미션도 허용으로 바꿔야 한다. 링크로 만들어질 디렉토리는 저절로 생성되고 퍼미션 777로 잡혔음.


ln -sf /www/dir_1/r_photo /www/dir_2/r_photo


 

27. ^M 문자 없애기
a = 1^M
def vartest(a):^M
a = a + 1^M
return a^M
a = vartest(a)^M
print a^M
Unix
류 기계에서는 그냥 ^J 하나만을 개행문자로 사용하는데 PC에서는 MJ 이렇게 두 제어문자가 연속으로 사용되어야 개행문자로
받아들이죠. (그래서 PC쪽에서 만들어진 txt문서를 유닉스 기계로 불러와 vi 등을 실행하면 줄 끝마다 보기싫은 ^M이
붙습니다. 뭐 vi에서 요거 지우는건 간단하지만요.)

PC에서 Unix에서 작성한 텍스트 문서를 보통 ftp로 받아오거나 하면 워드패드 등에서 봤을 때 전혀 개행이 되어있지 않지요. 하지만 MS Word 등 좀더 강력한 편집기에선 대개 잘 처리해서 잘 보여줍니다.


는 간단한 Python 소스입니다. 위의 경우 처럼 ^M문자가 있을때, dos2unix라는 유틸리티를 많이 사용하기도 하죠.
하지만 vi에서 간단하게 모두 삭제할수도 있습니다. dos2unix가 없거나 빠져나가서 지우는게 귀찮을때 좋겠죠.


령은 :%s/(ctrl+v)M//g 입니다. (ctrl+v)M 이거는 ctrl과 v를 눌러준후, ctrl키를 떼지 말고 바로
m을 눌러주시믄 됩니다. 위는 정규표현식을 이용한것이고, 형식은 %s/이것을/요걸로/g 입니다 그럼 문서안의 모든 "이것을"
"요걸로" 바꾸게 되죠. 단, M의 경우 ctrl+M의 뜻인데 단순히 문자로 M을 바꾸라도 해도 인식을 못하기 때문에, 위처럼
(ctrl+v)M 으로 해주셔야 합니다.


28. 비어있는 행을 찾기
#grep -n '^$' filename

규표현 의미 ^ 행의 처음 $ 행의 끝 . 임의의 한 문자 [...] ... 안의 임의의 한 문자. a-z,0-9 같은 범위도
사용 [^..] .. 안에 없는 임의의 한 문자. 범위 사용가능 r* 0회 이상 r 반복 r+ 1회 이상 r 반복 r? 0 혹은
1회의 r r{n,m} n회 이상 m회 이하 r 반복 r1|r2 r1 혹은 r2 (egrep 만) (r) r 의
정규표현(egrep 만)


29. =====>  맨아래..


30. 각자가 사용하는 컴퓨터의 정보를 알고 싶을때
[root ...]#more /proc/cpuinfo
위와 같이 치면 사용자의 컴퓨터 정보를 볼수 있으며,


[root ...]#more /proc/meminfo
라고 치면 사용자의 메모리 정보를 볼수 있습니다.


31. 전체 메일

저 보낼 내용을 텍스트로 파일로 만들어야 합니다.어디에서든지 가능하지요! [root@aromi /root]# vi nea
안녕하세요! 저희 서버에서는 웹서버를 오늘부터 시작합니다. 사용자 여러분의 많은 관심과 이용을 부탁드립니다.

:wq [root@aromi /root]#

만약, 한글을 사용하지 못하면 윈도우95에서 먼저 쓴다음에 ftp를 이용해서 올리면 됩니다. [root@aromi /root]# mail -s "[공지]" `cat /etc/passwd|gawk ?F :'{print$1}'`

[공지]-


32. 디렉토리만 빠르게 검색
ls -al | grep "^d"


 

33. 호스트 네임 바꾸기
/etc/HOSTNAME
file은 부팅시 /etc/sysconfig/network file 의 HOSTNAME 부분을 참조하여 저장합니다. 호스트
네임을 바꾸고자 한다면 /etc/sysconfig/network file 의 HOSTNAME 부분을 바꿔주면 됩니다.

[root@linux /root]# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME="linux"
GATEWAY=""
GATEWAYDEV=""
FORWARD_IPV4="yes"
바꾸신후 시스템을 재부팅 하신거나, #/etc/rc.d/init.d/network restart 명령을 내리시면 됩니다.


34. 틀린명령어 틀린글자만 바꿔서 실행
#
./configure --prefax=/usr/local/apache 앗, 틀렸습니다. prefax가 아니라
prefix인데... 고쳐야지요...간단하게 화살표키로 왔다갔다 하면서 지워지고 바꿔주면 되겠지만 다른 방법이 있습니다. #
^fax^fix^ 라고 하면... -


35. 유닉스의 현재 버젼과 종류 그리고 라이센스등을 알려주는 명령어
[root@aromi /root]# uname -a


 

36. 열려있는 포트 알아내기
netstat -anp | grep LISTEN


 

37. 텔넷 모든 접속자에게 메세지 보내기
wall 내용... Ctrl-D


 

38. lsof는 열려있는 파일을 나타내 주는 옵션
여기에 보안 점검을 위하여, -i 옵션을 사용하면, 현재 열려 있는 포트와 링크되어 있는 서비스 또는 프로그램이 모두 나타나죠. 자신이 열어 놓지 않은 포트가 열려있다던지하면 한번쯤 의심해 봐도 되겠죠?


39. 사용자가 어디에서 무엇을 하는지 알아내기
w라는 명령어를 사용하시면 된답니다. 이 때, w [-s] 를 붙여주시면 -s 옵션이 긴 정보 대신에 필요한 짧은 정보만 알려 준답니다.


40. 텔넷 화면 수정
로그인화면: /etc/issue.net 로그인후화면: /etc/motd


41. 하위 디렉토리 한꺼번에 만들기
mkdir -p music/koreanmusic/ost


 

42. 특정디렉토리의 모든 파일 안의 특정 문자열 치환
for i in $*; do
sed "s//opt/arm//opt/arm-linux/g" < $i > $i.new
mv -f $i.new $i
done

(chihwan.sh를 포함하지 않는 디렉토리면)
find ./ -type f -exec 'chihwan.sh' {} ; s


 

43. killall 명령 시뮬레이션 (프로세스명으로 죽이기)
ps
aux | grep 프로세스명 | grep -v grep | awk '{ print $w }' | xargs kill -9 모든
프로세스 나열 지정한 프로세스만 뽑아냄 grep 명령이 포함된 라인 제거 awk로 두번째 필드만 뽑아냄 xargs에 의해 걸러진
아이디로 죽임


44. find와 grep
find . -name "H20021115.*" -exec grep -l '...;........;110100' {} ;


45. vi 검색, 치환
구호스트 서비스 오늘 날짜에서 분류코드가 110100인 파일 찾기 :%s/./U&/g 모든문자-


46. 파일내의 중복되는 행을 제거 : uniq

력 파일에서 연속되는 행을 비교하여, 두 번째 이상의 동일한 행들을 제거하고 나머지는 출력파일로 출력 연속되어 표시되지 않으면
동일한 행이 존재할 수 있음. sort 명령을 사용하여 정렬한 후 사용하는 것이 타당 사용법uniq [-cdu] [+|숫자]
[입력파일 [출력파일]] -c : 각 행이 연속적으로 나타난 횟수를 행의 시작부분에 표시 -d : 연속적으로 반복되는 행만 출력
-u : 연속적으로 반복되지 않는 행만 출력 +숫자 : 행의 처음 '숫자' 만큼의 문자는 무시 -숫자 : 행의 처음 '숫자'
만큼의 필드는 무시


47. 파일의 결합
여러 개의 텍스트 파일을 하나의 파일로 순차적으로 묶는데 사용 cat [파일명1] [파일명2] ...

% cat

행단위 결합 : paste 여러 파일에 대해여 행간 결합을 수행하거나 하나의 파일에 대해 연속되는 행들을 결합 둘이상의 파일에 대해서 테이블상의 하나의 열과 같이 취급하여 동일한 행번호 끼리 결합

paste [파일명1] [파일명2].. paste -d리스트 [파일명1] [파일명2] ... paste -s [-d리스트] [파일명] d : 행간 결합시 행간 구분문자들의 리스트 s : 한파일의 연속되는 행을 결합

% cat

두 파일을 동일한 필드 값에 따라 행 단위 결합 : join


계형 데이터 베이스에서의 join 연산과 동일 키로 사용할 필드에 대해 정렬된 두 파일의 각 행에 대해 동일한 키 값을 갖는
행들을 결합 입력으로 사용될 두 파일은 키 값에 대해 오름 차순으로 정렬되어 있어야 함 출력 결과는 기본적으로 키 값이 먼저
표시되고, 첫번째 파일에서 키를 제외한 나머지 필드, 두번테 파일에서 키를 제외한 나머지 필드가 표시 필드 구분은 공백, 탭,
개행문자가 기본, 연속적으로 나타날 경우 하나로 취급

% cat


48. 파일의 암호화 : crypt
파일을 암호화 하여 키를 알지 못하는 사람은 내용을 볼 수 없도록 함 표준 입출력 사용

% cat < crypt.data1
Enter key:hello
test test
안녕하십니까?
%


 

49. 개행을 제외한 화면내의 보이지 않는 문자 출력
cat -v http://comp-cse.sch.ac.kr/~pl/lecture/linux/file2.html


 

50. 화일내의 포함된 특정문자열로 찾아서 내용만 출력하기
grep -h '20030305......01' ./R00*


 

51. 특정 파일의 화일명을 비슷하게 여러개 한꺼번에 바꾸기
ls *.* | awk '{print "mv",$1, $1 }' |

sed "s/ ([a-zA-Z0-9]*).([a-zA-Z0-9]*)$/1._2/g"
현재디렉토리의 모든 *.* 파일을 *._* 형식으로 바꾼다. 더 간단하게

ls *.* | sed "s/([a-zA-Z0-9]*).([a-zA-Z0-9]*)/mv 1.2 1._2/g"
--------------------------------------------------------------------------------


52. 어제 날짜 구하기
$ date -v-1d "+%Y-%m-%d" [컴퓨터분류]


 

53. 원하지 않는 사용자 죽이기
[root@dream /root]# skill -KILL sunny
위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다. 그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠? 그럴때는

[root@dream /root]# skill -KILL -v pts/14
이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다.


54. UNIX상에서 한글출력이 깨져 나올경우

닉스상에서 한글을 stdout출력할 경우 가끔 출력되는 문자들이 몽땅 깨져서 나오는 경우가 있다. 이때부터는 프로그램이 종료된
이후에도 쉘 프람프트를 비롯, 쉘에서 입력하는 모든 커맨드가 깨져서 나온다. 이는 ascii code 로 ^n 에 해당하는
문자가 출력될 때 나오는 현상으로 그 이후로는 MSB가 모두 켜지기 때문이다. 문자가 깨져나오는 이후부터 ascii code 로
^o 에 해당하는 문자를 출력하면 반대로 된다. 쉘 커맨드 상에서라면, # echo ^v^o 라고 해야겠지만 커맨드가
깨져나오므로 shell이 해석을 못한다. 따라서, command line에서 ^v^o를 치고 enter 하면 된다


55. 현재 디렉토리의 대량의 파일을 각자의 파일명가운데에 특정문자
추가하여 바꾸기



29. 기타 명령어 떼
alias(명령어 간소화하기)
apropos(관련된 명령어 찾기)
arch(컴퓨터 종류 알기)
arp(같은 서브넷의 IP 보여주기)
at(작업 시간 정하기)
atd(계획성 있는 작업 실행하기)
awk(특정 패턴 문자 처리하기)
a2p(펄 파일로 바꾸기)
badblocks(배드 블럭 검사하기)
bc(계산기)
biff(메일 수신 소리로 확인하기)
bg(후면작업; 배경화면 설정)
bind(키나 함수 순서 결합하기)
break(루프 빠져나가기)
cal(달력보기)
builtin(내부 명령어 알아보기)
case(조건 처리하기)
cat(화면상에서 파일 보기)
cd(디렉토리 변경하기)
cfdisk(디스크 설정하기)
chattr(파일 속성 변경하기)
chfn(사용자 정보 변경하기)
chgrp(파일, 디렉토리가 속했던 그룹 바꾸기)
chmod(파일 권한 바꾸기)
chown(파일 주인 바꾸기)
chsh(지정된 셸 바꾸기)
cksum(CRC값을 점검한다)
clear(화면 청소하기)
clock(CMOS 시각을 조정하기)
cmp(파일 비교하기)
colcrt(문자 변환 필터)
colrm(열 삭제하기)
column(가로 정렬하기)
comm(파일 비교 출력하기)
command(명령어 알아보기)
continue(루프 계속돌기)
cp(파일 복사하기)
cpio(복사본 만들기)
crontab(cron을 관리한다)
csplit(파일에 서식, 규칙 정하기)
cut(필요한 필드만 출력하기)
date(날짜 보기)
dd(블럭장치 읽고 쓰기)
debugfs(ext2 파일 시스템 디버깅하기)
declare(변수 선언하기)
df(파일 시스템의 사용량 보기)
dirs(디렉토리 목록 표시하기)
dmesg(부팅 메시지 보기)
dnsdomainname(DNS 이름 출력)
domainname(NIS 이름 출력&설정)
du(디렉토리와 파일의 용량 파악하기)
dumpe2fs(파일 시스템 정보 보기)
echo(표준 출력하기)
eject(장치 해제하기)
elm(메일 관련)
enable(내부 명령어 지정)
env(환경변수 출력하기)
eval(인수 읽기)
exec(셸 명령어 실행하기)
exit(종료하기)
expand(탭을 공백으로 변환하기)
export(변수 지정하기)
e2fsck(파일 시스템 복구하기)
fc(지정된 편집기 받기)
fdformat(플로피 디스크 포맷하기)
fdisk(파티션 나누기)
fg(지정된 작업을 전면 프로세스로 시작하기)
file(파일 종류 보기)
find(파일 찾기)
finger(사용자 정보 알기)
fold(정형화하기)
fmt(정형화하기)
for(반복 실행하기)
free(메모리 사용량 알아보기)
fsck(파일 시스템 검사하기)
fstab(파일 시스템에 대한 고정적인 정보 저장하기)
ftp(파일 전송 프로그램)
fuser(프로세스 ID 출력)
getkeycodes(매핑 테이블 출력하기)
grep(특정 문자(열) 검색하기)
gzexe(실행 파일 압축하기)
gzip(압축하기)
halt(시스템 종료하기)
hash(기억해 두기; index 역할)
head(파일의 앞부분 출력하기)
help(도움말 보여주기)
host(호스트 정보 보기)
history(사용 명령어 목록보기)
hostname(서버 이름 알기)
id(계정 정보 알기)
if(조건문 실행하기)
ifconfig(랜카드에 주소 할당하기)
imolamod(모듈 설치하기)
inetd(인터넷 서비스의 최상위 데몬)
init(실행 단계 정하기)
ispell(철자법 검사하기)
jobs(수행중인 프로세스 알기)
kbd_mode(키보드 모드 출력하기)
kill(프로세스 죽이기)
klogd(커널 로그 데몬)
ldd(공유 라이브러리의 의존성 알기)
less(페이지 단위로 출력하기)
let(정규식 표현하기)
lilo(부팅하기)
ln(링크하기)
locate(패턴에 맞는 파일 찾기)
login(로그인하기)
logger(시스템 로그 기록하기)
logname(사용자 로그인명 보여주기)
logout(로그인 셸 종료하기)
look(특정 단어 검색하기)
losetup(중복 장치 확인하기)
lpd(프린트 데몬)
lpq(현재 프린트 작업 상태 출력하기)
lpr(출력하기)
lprm(대기열에 있는 문서 삭제하기)
ls(디렉토리 내용보기)
lsattr(파일 시스템의 속성 보여주기)
lsdev(하드웨어 장치 출력하기)
lsmod(모듈 정보 출력하기)
mail(메일 관련)
make(컴파일하기)
man(매뉴얼 보기)
mattrib
mbadblocks
mcd
mcopy
mdel
mdeltree
mdir
mesg(메시지를 받을 수 있는지 확인하기)
mformat
minfo
mkdir (디렉토리 만들기)
mke2fs(파일 시스템 생성하기)
mkfs(파일 시스템 만들기)
mknod(특수 파일 만들기)
mkswap(스왑 영역 지정하기)
mlabel
mmd
mmount
mmove
mpartition
mount(장치 연결하기)
more(화면 단위로 출력하기)
mrd
mren
mtoolstest
mtype
mutt(메일 관련)
mv(파일 옮기기)
mzip
netstat(현재 네트웍 상황 보기)
nice(프로세스 우선 순위 변경하기)
od(8진수로 파일 보기)
passwd(암호 입력하기)
pidof(실행중인 프로그램의 프로세스 ID 찾기)
pine(메일 관련)
ping(네트웍 확인하기)
popd(pushd 취소)
ps(프로세스 纘?알기)
pstree(프로세스 상관관계 알기)
pwd(절대경로 보여주기)
quota(디스크 한계량 알기)
rarp(rarp 테이블 관리하기)
rcp(원격 호스트에 파일 복사하기)
rdev(루트, 스왑장치, 램 크기, 비디오 모드를 조사하고 설정하기)
rdate(네트웍으로 시간 설정하기)
reboot(재부팅하기)
rmmod(모듈 지우기)
readonly(읽기 전용으로 표시하기)
renice(프로세스 우선 순위 바꾸기)
reset(터미널 초기화하기)
restore(다시 저장하기)
rlogin(바로 접속하기)
rm(파일 지우기)
rmdir (디렉토리 지우기)
route(라우팅 테이블 추가/삭제하기)
rpm(프로그램 추가/삭제)
rpm2cpio(rpm을 cpio로 변환하기)
rsh(원격으로 명령어 실행하기)
rup(호스트 상태 출력하기)
rusers(호스트에 로그인한 사용자 출력하기)
rwall(호스트 사용자에게 메시지 뿌리기)
script(기록하기)
set(변수값 설정하기)
setup(시스템 관련 설정하기)
showmount(호스트의 마운트 정보 보여주기)
shutdown(전원 끄기)
sleep(잠시 쉬기)
source(스크립트 번역하기)
split(파일 나누기)
ssh(암호화된 원격 로그인하기)
stty(터미널라인 설정 보여주기)
su(계정 바꾸기)
suspend(셸 중단하기)
swapoff (스왑 해제하기)
swapon(스왑 활성화하기)
sync(버퍼 재설정하기)
syslogd(로그인 과정 설정하기)
tac(거꾸로 보기)
tail(문서 끝부분 출력하기)
talk(이야기하기)
tar(파일 묶기)
tcpdchk(tcp wrapper 설정하기)
tcpmatch(네트웍 요청에 대해 예측하기)
tee(표준 입력으로부터 표준 출력 만들기)
telnet(원격접속하기)
test(테스트하기)
times(셸에서의 사용자와 시스템 시간 출력하기)
top(cpu 프로세스 상황 보여주기)
tr(문자열 바꿔주기)
true(종료 코드 리턴하기)
type(유형 보기)
ul(밑줄 처리해서 보여주기)
ulimit(제한하기)
umask(매스크 모드 설정하기)
umount(장치 해제하기)
unalias(별명 제거하기)
uname(시스템 정보 보기)
unexpand(공백 문자를 탭으로 변환하기)
uniq(중복된 문장 찾기)
useradd(사용자 계정 만들기)
userdel(계정 삭제하기)
usermod(사용자 계정정보 수정하기)
unset(설정 변수 해제)
uptime(시스템 부하 평균 보여주기)
users(로그인된 사용자 보여주기)
w(시스템에 접속한 사용자 상황 알아보기)
wait(프로세스 기다리기)
wall(모든 사용자에게 메시지 보내기)
wc(문자, 단어, 라인수 세기)
whatis(명령어의 간단한 설명보기)
while(루프 명령어)
who(사용자 알기)
write(콘솔 상에서 간단한 메시지 보내기)
xcopy(반복적으로 복사하기)
XFree86
ypchfn(NIS에서 사용하는 chfn 명령어)
ypchsh(NIS에서 사용하는 chsh 명령어)
yppasswd(NIS에서 사용하는 passwd 명령어)
zcat(압축 파일 보기)
zcmp(압축 파일 비교하기)
zforce(강제로 gz 만들기)
zgrep(압축 상태에서 grep 실행하기)
zmore(압축 상태에서 more 실행하기)
znew(.Z 파일을 .gz로 다시 압축하기)
 http://blog.naver.com/hyshin01?Redirect=Log&logNo=140036986997

AND

RSS란

WEB2.0 2007. 3. 22. 02:43
웹에 홈페이지를 만들고 쉽다면 HTML 문법을 공부해야 하는 것 처럼 해당 컨텐츠를 RSS를 통하여 배포하고 싶다면 당연히 RSS 구문을 익히셔야 합니다. 다행인 것은 RSS 구문은 HTML 문법만큼 간단하여 쉽게 익힐 수 있습니다.

그러나 RSS를 사용함에 있어 알고 있어야 하는 것이 있습니다. RSS는 크게 두가지의 버전이 공존합니다. 간단함을 지향하는 RSS 0.9x,RSS 2.0좀 더 확장성이 강한 RSS 1.0 입니다. 두가지 버전 모두 동일한 기본 구조와 XML을 기반으로 하고 있습니다.

1. RSS의 내력 및 버전별 비교
RSS 0.9는 Netscape 사의 포털 서비스를 위한 다소 복잡한 형식으로 제작 되었고, 그 후에 웹블로그 제품과 기타 다른 제품에 사용을 위하여 UserLand Software에서 좀 더 간단한 RSS 0.91 발표하였습니다.

그 비슷한 시기에 RSS-DEV Working Group은 RDF(Resource Description Framework) 기반으로 한 RSS 1.0를 제작하였고, RSS 1.0 역시 RSS 0.9를 기본으로 하고 있습니다. 그 후에 UserLand 는 0.92,0.93.0.94 그리고 2.0을 발표하였습니다.

버전 제작 내용 사용
0.9 Netscape - 미사용
0.91 UserLand 간단함 공식버전 2.0 이나 많은 곳에서 사용되고 있슴
0.92,0.93,0.94 UserLand 0.91 보다 풍부한 metadata 제공 RSS 2.0 사용
1.0 RSS-DEV Working Group RDF를 기반으로 모듈을 통한 확장성 RDF 기반의 Application를 사용하거나 RDF 모듈이 필요할 경우
2.0 UserLand 모듈을 통한 확정성이 있고 0.9x 버전에서 쉽게 이전 가능 일반적인 자료 배포
2. RSS 2.0
RSS 2.0 이 RSS 0.9x 버전를 모두 포함하고 있기에 RSS 0.9x 버전에 대한 설명은 생략하도록 하겠습니다. 이전 버전에 대하여 관심이 있는 분들은 관련정보를 참고해 주십시요.

<?xml version="1.0" encoding="euc-kr" ?>
<rss version="2.0">
<channel>
<title>아이헬퍼스</title>
<link>http://www.ihelpers.co.kr</link>
<description>아이헬퍼스</description>
<language>ko</language>
<lastBuildDate>Nov, 15 2004 08:13:29 GMT</lastBuildDate>
<webMaster>smson@ihelpers.co.kr</webMaster>
<item>
<title>RSS에 대하여</title>
<link>http://www.ihelpers.co.kr/programming/lec.php?CMD=view&TYPE=1&IDX=245</link>
<author>손상모</author>
<pubDate>Nov, 15 2004 08:13:29 GMT</pubDate>
<category>강좌</category>
</item>
<item>
<title>게시판의 조회수를 정확하게 측정하자</title>
<link>http://www.ihelpers.co.kr/programming/tipntech.php?CMD=view&TYPE=0&IDX=458</link>
<author>손상모</author>
<pubDate>Nov, 13 2004 01:33:48 GMT</pubDate>
<category>Tip&Tech</category>
</item>
<item>
<title>글자와 이미지에 Blink 효과주기</title>
<link>http://www.ihelpers.co.kr/programming/tipntech.php?CMD=view&TYPE=0&IDX=457</link>
<author>손상모</author>
<pubDate>Nov, 12 2004 19:36:07 GMT</pubDate>
<category>Tip&Tech</category>
</item>
</channel>
</rss>
[ RSS 2.0 샘플 ]

Required channel elements

Element Description Example
title 채널명 ( 사이트명 또는 사이트의 메뉴명 ) 아이헬퍼스 - 새소식
link 웹사이트 URL 정보 또는 채널에 해당하는 웹사이트 URL 정보 http://www.ihelpers.co.kr
description 채널 설명 ( HTML 사용은 하지 않는 것이 좋다 ) 아이헬퍼스의 최식 소식

Optional channel elements

Element Description Example
language 채널에 사용한 언어 - 사용가능 언어 ko
copyright 채널정보에 대한 권한 Copyright ⓒ 2000-2004 iHelpers.
manageingEditor 채널 수정 담당자 이메일 주소 smson@ihelpers.co.kr (홍길동)
webMaster 채널 관련 문의 담당자 이메일 주소 webmaster@ihelpers.co.kr (홍길동)
pubDate 발행일자( RFC 822 형식 ) Nov, 15 2004 08:13:29 GMT
lastBuildDate 최종변경시간 Nov, 15 2004 08:13:29 GMT
category 채널이 속해 있는 카테고리 정보( 한개 이상 가능 ) 공지사항
generator 채널 생성 프로그램 EditPlus
docs RSS 형식에 대한 문서 URL http://blogs.law.harvard.edu/tech/rss
cloud <cloud domain="" port="" path="" registerProcedure="" protocol="" /> <cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />
ttl 채널정보 갱신 주기( 단위 : 분) <ttl>60</ttl>
image 이미지 정보( GIF,JPEG 또는 PNG )  
url 이미지 URL 정보  
title 이미지 설명,HTML의 IMG 태그의 ALT 구문과 동일  
width , height 넓이, 높이 ( 단위 : pixel ) width,height ( 최대, 기본 ) - 144/88,400/31
rating PICS Rating  
textInput CGI Script와 연계할 수 있는 Text Input 박스와 Submit Button 기능  
title Submit Button의 Label  
description Input 박스설명  
name Input 박스의 name  
link CGI Script URL  
skipHours Reader(Aggregator)가 채널정보를 읽지 않기 원하는 시간 0 ~ 23
skipDays Reader(Aggregator)가 채널정보를 읽지 않기 원하는 날짜 Monday,Tuesday,WednesDay...

Item Element

RSS 0.92까지는 아이템의 수가 제한 되어 있었으나 RSS2.0에 오면서 숫자에 제한이 없어 졌습니다. 아이템에 해당하는 모든 Element는 선택사항입니다.

Element Description Example
title 아이템 제목 스파이더 쫓아 버리기
link 아이템 URL 정보 http://www.ihelpers.co.kr/programming/tipntech.php?CMD=view&TYPE=0&IDX=452
description 아이템에 대한 간략 설명( entity-encoded HTML ) robots.txt을 이용하여 Spider 사용 제한하기
author 작성자 이메일 주소 smson@ihelpers.co.kr
category 아이템 해당 카테고리(메뉴) 강좌
comments 아이템과 관련있는 URL 정보  
enclosure 아이템에 추가할 media 정보 <enclosure url="http://www.scripting.com/mp3s/weatherReportSuite.mp3" length="12216320" type="audio/mpeg" />
guid 유일한 식별문자 http://www.ihelpers.co.kr/programming/tipntech.php?CMD=view&TYPE=0&IDX=452
pubDate 발행일자 Nov, 05 2004 22:53:27 GMT
source 출처 http://www.robotstxt.org/wc/robots.html
3. RSS 1.0
RSS 1.0에서 RSS는 "RDF Site Summary"를 의미합니다. RSS 1.0은 RDF를 사용하고 XML-Namespaces( RSS Modules )을 이용하여 큰 마찰 없이 확장을 가능하게 해 줍니다. 모듈로써는 Dublin Core Module이 가장 잘 알려져 있습니다. RSS 1.0은 아래의 샘플 코드에서 보는 것 처럼 RSS 0.9x 와 거의 비슷하나 몇가지 다른 요소를 가지고 있습니다.
  • <rdf:RDF>...<rdf:RDF> Element를 사용한다.
  • RSS 1.0는 'http://purl.org/rss/1.0' ( Default Namespace ), 'http://purl.org/dc/elements/1.1/' ( Dublin Core )과 같이 Namespace를 사용한다.
  • Item Element가 Channel Element 밖에서 사용된다. ( RSS 0.9x 의 경우는 Channel Element 내부에 있슴 )
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel rdf:about="http://www.xml.com/cs/xml/query/q/19">
    <title>XML.com</title>
    <link>http://www.xml.com/</link>
    <description>
	XML.com features a rich mix of information and services for the XML community.
	</description>
    <language>en-us</language>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://www.xml.com/pub/a/2002/12/04/normalizing.html"/>
        <rdf:li rdf:resource="http://www.xml.com/pub/a/2002/12/04/som.html"/>
        <rdf:li rdf:resource="http://www.xml.com/pub/a/2002/12/04/svg.html"/>
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="http://www.xml.com/pub/a/2002/12/04/normalizing.html">
    <title>Normalizing XML, Part 2</title>
    <link>http://www.xml.com/pub/a/2002/12/04/normalizing.html</link>
    <description>
	In this second and final look at applying relational normalization techniques 
	to W3C XML Schema data modeling,Will Provost discusses when not to normalize, 
	the scope of uniqueness and the fourth and fifth normal forms.
	</description>
    <dc:creator>Will Provost</dc:creator>
    <dc:date>2002-12-04</dc:date>    
  </item>
  <item rdf:about="http://www.xml.com/pub/a/2002/12/04/som.html">
    <title>The .NET Schema Object Model</title>
    <link>http://www.xml.com/pub/a/2002/12/04/som.html</link>
    <description>
	Priya Lakshminarayanan describes in detail the use of the .NET Schema Object Model 
	for programmatic manipulation of W3C XML Schemas.
	</description>
    <dc:creator>Priya Lakshminarayanan</dc:creator>
    <dc:date>2002-12-04</dc:date>    
  </item>
</rdf:RDF>
[ RSS 1.0 샘플 ]

앞에서 이야기 한 것 처럼 두 버전 모두 장단점을 가지고 있습니다. 그러나 본인은 RSS를 "Really Simple Syndication" 에 무게를 더 두고 싶고, RSS 1.0은 부족하지만 여기서 마치도록 하겠습니다. 자세한 것은 관련정보의 자료를 참고하여 주십시요.

4. 관련정보

출처:http://www.ihelpers.co.kr/

AND

DB질문용

DB 2007. 3. 19. 20:34
사용자 삽입 이미지
AND

보안통신 ActiveX vs SSL

WEB 2007. 3. 19. 04:58
공인인증서와 ActiveX 컨트롤 부분에 대한 이해를 돕기 위해 왕수용씨께서 쓰신 글을 올립니다.
공인인증서와 ActiveX 컨트롤을 왜 도입했는지 그 이유에 대해 자세하게 설명이 돼 있습니다. 도움이 되셨으면 합니다.

----------------------

해외에서는 SSL의 보안통신만을 이용해 온라인 금융거래를 하는 반면, 국내에서는 디지털 개인 신분증인 공인인증서를 이용한 실체 확인을 이용하기 때문에 단순히 보안이 된 연결을 통해서 계좌번호와 비밀번호만을 입력하는 것으로 끝나지 않고, 개인에게 발급한 공인인증서를 통한 전자서명을 거쳐야만 하도록 하고 있다. 이것은 우리나라만이 고안한 특수한 방법은 아니라 전세계적으로 나아갈 방향으로 생각하고 있으나 모든 개개인에게 공인인증서를 발급하는 것이 현실적이지 않는 상황에서 우리나라에서는 적극적으로 추진한 결과이다.

하지만, 해외 특히 미국에서는 아직 일반화 되지 않았기 때문에 개인 인증서를 통한 개인 실체 확인 작업이 아직 브라우저에서는 원활하게 지원되고 있지 않은 상황이다. 따라서 개인인증서를 인터넷 연결을 통해서 금융기관에 전달하는 방법이 일반 웹브라우저에서는 지원이 되지 않기 때문에 ActiveX 기술을 이용해 웹브라우저의 기능을 확장하는 방법을 통했다. 이것이 바로 매킨토시 환경에서 금융거래를 힘들게 하는 큰 장벽으로 남아버렸다. 이것은 몇몇분들이 Windows만을 위해서 이렇게 구성했다는 억측과는 달리, 전자금융을 앞당기기 위한 어쩔수 없는 선택으로 봐야하며, ActiveX 기술만을 이용한 웹브라우저 확장뿐 아니라, Mozilla Plugin, Safari Plugin, Java Applet 등의 여러 형태로 개발함으로써 극복이 가능한 것이다.

또한, 우리나라에서 전자금융을 시도할 당시 미국에서는 64비트 이상의 암호화 기법에 대한 수출이 엄격히 금지되고 있었다. 즉, 64비트급으로 암호화를 할 경우 대형 슈퍼컴퓨터나, 일반 PC를 연결해서 계산할 경우 손쉽게 암호를 깰 수 있기 때문에, 기타국가의 정보가 암호화되어 미국 정보기관에서 알 수 없게 되는 것을 우려한 결과였다. 이러한 현실 때문에 국내에서는 자체 128비트 암호화 기술을 KISA에서 직접 개발하였으니, 이것이 SEED 암호화 기법이다. 따라서, 국내 금융거래에서는 이 SEED 암호화 기법이 이용된다. 물론 현재에 와서는 128비트 암호화 기법에 대한 수출금지조항이 풀렸지만(아직도 적성국가 7개국에 대해서는 규제를 하고 있음), 여전히 국내 금융거래에서는 SEED 암호화 기법이 이용되고 있다.

전자상거래에서의 ActivX 컨트롤 사용은, 위에서 설명한 것과 같이, 초기 브라우저의 64비트 암호화 제약으로부터 시작하였다. 하지만, 128비트 암호화가 허용되기 시작하면서도 여전히 필요성이 남은 것은, 바로 불량 상점 때문이었다. SSL을 이용한 전자거래에서는 사용자 브라우저와 상점서버간의 보안만을 보장해 준다. 따라서 이 안전한 보안 통신을 통해서 사용자 브라우저에서 상점으로 자신의 카드번호와 비밀번호를 알려준다고 하더라도, 문제는 이 상점 서버를 믿을 수 없다는 것이다. 예전에 한참 문제가 된 적도 있었지만, 상점 서버가 해킹(혹은 상점주의 부도덕)에 의해 사용자의 신용정보가 고스란히 노출 된 수 있다는 문제점이 발생한다. 이러한 문제점을 해결하기 위해서 ActiveX 컨트롤을 통해서 PG(전자결재 대행업체)와 브라우저와 직접 통신을 통해서 결재를 진행하고 그 결과만을 상점서버에 전송하는 형태로 발전하였다.

또한, 전자상거래가 발달하고, 카드 도용이 문제가 되자 전재결재 시에도 실체인증이 필요하다는 의견이 대두하였다. 즉, 브라우저상에서 카드결재를 하는 사람이 단지 카드번호만 아는 사람인지, 실제로 카드 소유자인지 확인이 필요하다는 것이다. 이 해결방법이 바로 인터넷뱅킹에서 이미 사용중인 공인 인증서를 이용한 실체확인과정이다. 이를 위해서, 위 전자결재과정에서 BC, 국민카드에서는 ISP 결재 라는 이름으로 ‘한국사이버페이먼트’사를 통한 실체확인을 거쳐 결재가 일어나고, 나머지 대다수의 카드는 비자카드사의 ‘안심클릭’을 통해서 실체확인 과정을 거쳐서 PG를 통한 결재가 이루어지게 된다.
AND

AND

XHTML
http://validator.w3.org

CSS
http://jigsaw.w3.org/css-validator/

XML
http://www.stg.brown.edu/service/xmlvalid/

IABF 정보통신 접근성 향상 표준화 포럼
웹 접근성 평가 및 수정도구 KADO-WAH
http://www.iabf.or.kr/web/kadowah.asp
AND

출처 : http://blog.naver.com/whycry11/80029925561


1. 개념잡기

일반화 시킨 표현. 이것을 정규표현이라고 요약할 수 있을 것 같다.
다음의 과정을 너무 쉽다 생각말고 따라오길 바란다.

- 감잡기

"12354" -> 숫자
"asdfasf" -> 알파벳
두 가지의 간단정규표현을 만들었다. 실생활의 보기와 비추어보자.
"길이가 3인 이름!"
위의 표현은 길이를 표시하는 방법이 없다. 조금 더 발전시켜서 "알파벳{3}"이런식
으로 길이를 표현할 수 있도록 한다. 그리고, "알파벳"란 것도 너무 길다 "알"
이라고 한 글자로 표현한다. 그러면 "길이가 3인 이름"은
"알{3}"으로 표시가 가능하다.
길이가 10인 숫자는 "수{10}"
"길이가 1인 알파벳이 나오고 그 다음에 길이가 3인 숫자가 나오는 문자열"! ->
"알{1}수{3}"얼핏이나마 감이 올 것이다.
"첫 글자는A, 그 다음은 아무 알파벳 5글자" -> "A알{5}"

- 조금 더

아이디는 대개 첫 글자는 영문이고 두 번째부터는 영문이나 숫자가 온다. 이것을
표현하기 위해선 이것 들 중에 하나란 의미를 갖는 새로운 표현이 필요하다.
"a,b,c,d 중에 하나" -> [abcd]
응용하면,
"알파벳이나, 숫자중 하나" -> [알수]
"[" 안에 있는 문자들의 순서는 의미가 없으며, 그 표현은 (클래스라고 한다.)  
결국 한 글자를 말한다.
위에서 말한 "첫 글자는 영문, 두 번째 부터는 영문이나 숫자가 11자"를
표현하면, "알[알수]{11}".
그런데, 실제로 모든 아이디가 12자인 것은 아니다, 대개 4자부터 12자를 지원한다.
새로운 표현이 등장한다. "몇 자부터 몇 자"
"A가 3글자부터 12자" -> "A{3,12}"
"알파벳이나 숫자가 1자부터 100자" -> "[알수]{1,100}"
이제 아이디를 다시 정의하자.
"첫 글자는 영문, 영문이나 숫자가 3자부터 11자" -> "알[알수]{3,11}"

2. 표현식

지금 까지의 규칙에서 설명한 용어를 실제 정규표현에서 사용하는 표현으로 바꾸고,
다른 세부적인 옵션에 대해 알아보자.

\ : 다음의 글자가 특별한 문자임을 나타낸다. 때론, 그 다음 문자 자체를 의미하기
도 한다.
보기를 들면, "\n"은 문자"\"과 문자"n" 두 글자와 매치되는 것을 의미하는 것이 아
닌,
새줄(New Line)을 의미하며, "\\"은 첫 "\" 다음 문자인 "\" 자체를 의미한다.
즉, "\\"은
"\"과 매칭된다.

^ : 입력문자열의 맨 처음을 의미한다. (맨 첫 글자가 아니라, 맨 처음이란 문맥적 의
미를
말한다. 아주 중요하다) 기본적으로 정규표현은 입력 문자열의 한 줄에만 적용된다.
하지만, 옵션에 따라 여러줄에 적용할 수도 있다. 그럴 경우에는 "^"는  "\n"
나 "\r"
다음의 위치를 의미한다.

$ : "^"는 반대로 입력 문자열의 맨 끝을 의미한다. 역시 여러줄에 정규표현이 적용

경우에는 "\n"이나 "\r"의 앞의 위치를 의미한다.

* : 이 문자 앞의 표현이 0번내지 무한번 반복될 수 있음을 말한다.
보기를 들면, /a*/은 "a", "", "aaaa", "aaaaa"와 매칭된다.
(0번이상은 없어도 된다는 것을 의미한다.)

+ : *와 같지만, 0번이상이 아니라 1번이상이라는 점을 제외하곤 /*/와 같다.

? : 앞의 표현이 0번 또는 1번. /do(es)?/는 "do", "does"와 매칭된다.

{n} : 앞의 표현이 n은 음수가 아닌 정수이어야 하며, 앞의 표현이
n번 매치되는 것을 말한다.

{n,} : 앞의 표현이 n은 음수가 아닌 정수이어야 하며, n번 이상
매치되는 것을 말한다.

{n,m} : 앞의 표현이 n번 이상 부터 m번 이하까지 매칭되는 것을
말하며, /*/는 /{0,}/과 같으며, /+/는 /{1,}/과 /?/는 /{0,1}/으로
표현 가능하다.

. : "\n"을 제외한 한 글자를 뜻한다. 만일 모든 글자를 표현하고
싶다면("\n"마저도 합친) /[.\n]/을 사용하면 된다.

x|y : x 또는 y와 매칭된다. 보기를 들면, /z|food/는 "z" 또는
"food"와 매칭된다. /(z|f)ood/는 "zood" 또는 "food"와 매칭된다.
(참고로 괄호는 묶어준 것 이상의 의미가 있다.)

(패턴) : 해당 패턴과 매칭시키고, 그 부분을 특정 변수에 담는다.
그 변수 이름은 JScript는 $0~$9까지의 변수에 저장이 되고(Perl과 같다.),
VBScript에서는 SubMatches 컬렉션에 저장된다.
괄호기호 자체와 매치시키고 싶다면? /\(/와 /\)/를 사용한다.

(?:패턴) : 해당 패턴과 매칭은 시키지만, 그 부분을 특정 변수에
담지 않는다. 왜 이게 필요할까?
위의 보기에서 /(z|f)ood/는 "zood" 또는 "food"와 매칭된다고 했는데,
단순히 매칭의 목적으로 사용했지만, "zood"의 경우 "z"가 $0 이란
변수에 저장이 되고 말았다. 이러한 것을 막기 위해서 사용하는 것이
(?:패턴)이다.

(?=패턴) : (?:패턴)과 동일하지만, 패턴과 일치한 부분이후부터
다음 매치가 일어나지 않고 패턴 앞부터 다시 매칭이 진행된다.
즉, 룩업(lookup, lookahead)을 할 뿐이다. /Windows (?=95|98|NT|2000)/ 은
"Windows 2000"의 "Windows" 부분과 매칭이 되며 다음 매칭은
"2000" 다음 부터가 아닌 "Windows" 다음 부터 진행이 된다.

(?!패턴) : (?=패턴)과 반대다. /Windows (?=95|98|NT|2000)/ 은
"Windows 3.1"의 "Windows" 부분과 매칭이 된다.

[xyz] : "["안에 있는 표현중 하나를 의미한다.

[^xyz] :  "["안에 있는 표현을 제외한 것중 하나를 의미한다.
"[^abc]"는 "plain"의 "p"때문에 매칭된다.

[a-z] : "a"부터 "z" 까지의 문자중 하나

[^a-z] : "a"부터 "z" 까지의 문자를 제외한 하나

\b : 단어의 경계(단어와 공백, "\n", "\r"의 사이)와 매칭된다.
보기를 들면, "er\b"는 "never"와는 매칭되지만, "verb"와는 매칭되지 않는다.

\B : 단어의 경계가 아닌 것과 매칭된다. "er\B"는 "verb"와는
매칭되지만, "never"와는 매칭되지 않는다.

\cx : Ctrl+x 키와 매칭된다. "\cc"는 Ctrl+C와 매칭된다. x의 범위는
[a-zA-Z]이며, 만일 이 이외의 문자를 사용한다면 "\c"는 "c"와 동일하다.

\d : [0-9]와 같다.

\D : [^0-9]와 같다. 참고로 대문자는 소문자의 반대 의미를 갖는다.

\f : 폼피드(form-feed) 문자를 의미하며, "\x0c"와 "\cL"과 동일하다.

\n : 새 줄(newline)를 의미하며, "\x0a"와 "\cJ"와 동일하다.

\r : 캐리지 리턴(carriage return)을 의미하며, "\x0d"와 "\cM"과 동일하다.

\t : 탭. "\x09", "\cI"과 동일

\v : 버티컬 탭. "\x0b", "\cK"과 동일

\s : 화이트스페이스를 의미한다. 화이트스페이스란 공백, 탭, 폼피드,
캐리지리턴등을 의미한다. [ \f\n\r\t\v]과 동일("\f"앞에 공백이 있다. 주의!)

\S : "[^ \f\n\r\t\v]"

\w : "_"를 포함한 일반적인 단어에 사용되는 문자를 말한다.
"[A-Za-z0-9_]" 과 동일

\W : "[^A-Za-z0-9_]"

\xn : n은 2자리 16진수이며, 해당 16진수 코드와 매칭된다. "\x412"는 16진수
41은 "A"이기 때문에 "A2"와 매칭된다.

\num : 캡쳐한 매칭을 가리킨다(백레퍼런스, backreference).
"(.)\1"은 연속된 두개의 문자열을 의미한다.
\n : "\1"은 위에서 캡쳐한 매칭(backreference)를 가리킨다고 했는데,
만일 이 패턴앞에 어떠한 n개의 캡쳐한 표현이 있다면 백레퍼런스이지만,
그렇지 않은 경우에는 8진수로 간주하여 해당 코드의 문자와 매칭된다.

\un : n은 4자리 UNICODE 이다. "\u00A9"은 copyright 심볼인 "ⓒ"와 매칭된다.


greedy, non-greedy

? : 앞에서 설명했는데, 왜 또? 라고 생각할 것이다.
?은 문맥에 따라 특별한 의미를 갖는다.
패턴 "o*"는 "foooood"와 매칭된다. 당연하다! 하지만, "f"앞의 "o"와
매칭되는 것이 아니다!! "ooooo"와 매칭된 것이다. 즉, 기본으로
정규표현 매칭은 가장 큰 범위를 선택한다. 이것을 greedy하다고 한다.
하지만, 때론 작은 범위에 매칭시킬 필요가 있을 경우가 있다.
(이의 적절한 보기는 잠시 후에 나온다.) "o*?"가 방금 말한
non-greedy 매칭이다.
수량관련 문자인 "*", "+", "?", "{n}", "{n,}", "{n,m}" 다음에 "?"가
나오면 non-greedy 매칭이된다.
잠시, 위에서 "o*?"가 "o"와 매칭된다고 했는데 이상하게 생각한 분이
있었을 것이다. 맞다. "o*?"는 ""와 매칭되었다. "*"는 0개이상임을
잊어선 안된다. "o+?"가 "o"와 매칭된다.

4. 보기

- 웹 주소

"
http://msdn.microsoft.com:80/scripting/default.htm"
위의 주소를 표현할 수 있는 정규표현은 아래와 같다.
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/
$1 : http
$2 : msdn.microsoft.com
$3 : 80
$4 : /scripting/default.htm

- 중복된 단어를 하나로

중복된 영어단어를 하나로 합치기 위해선, 우선 단어를 찾아야한다.
그리고 단어는 앞 뒤가 단어의 경계이어야한다. (말이 참 이상하지만..)
따라서, 아래와 같은 1차 정규표현을 얻을 수 있다.

/\b([a-z]+)\b/

연속해서 동일한 두개의 단어... 앞에서 캡쳐한 표현을 다시 활용하면 된다.
그리고, 단어와 단어 사이엔 화이트스페이스가 있다.

/\b([a-z]+)\s+\1\b/

- HTML 태그 제거

HTML문서에서 태그를 제거한 문서를 추출하고자 한다.
태그는 "<"와 ">"로 감싸여 있다.

/<.*>.*</.*>/

그런데, 위의 정규표현을 HTML문서에 적용하여 해당 패턴을 "",
빈문자열로 바꾸면 문서는 빈 문서가 되고 만다.

<html>
<title>...</title>
<body>
<font>.... </font>
...
</body>
greedy한 매칭이 기본값이라고 위에서 언급을 했다. 따라서,
위의 HTML 문서를 보면, <html>....</body>로 생각할 수 있다.
따라서, 문서 전체가 사라지는 것이다. 이것을 막기 위해선 "*"뒤에 "?"를
추가하면 된다.                          

/<.*?>.*?</.*?>/

아직 끝나지 않았다. :)

좀더 정제를 한다면, 올바른 HTML 문서는 <태그명>과 </태그명>이
서로 일치한다. 이것도 적용한다면,

/<.(*?)>.(*?)</\1>/

위의 $1에 해당되는 부분을 좀 더 생각해보면, ">"를 제외한 문자로
볼 수 있다. 따라서 최종적으로 아래와 같이 정리된다.

/<(\w+)[^>]*?>(.*?)</\1>/

- URL

/(?:^|")(http|ftp|mailto):(?://)?(\w+(?:[\.:@]\w+)*?)(?:/|@)([^"\?]*?)(?:\?
([^\?"]*?))?(?:$|")/

- float 상수

/^(((+|-)?\d+(\.\d*)?)|((+|-)?(\d*\.)?\d+))$/  -1.1 1.1 .9 .8


정규식 구문

정규식은 일반 문자(예: a에서 z)와 메타문자 로 알려진 특수 문자로 구성된 텍스트 패턴입니다. 패턴은 텍스트 본문을 검색할 때 일치하는 문자열을 하나 이상 설명합니다. 정규식은 검색되는 문자열과 일치하는 문자 패턴을 찾는 템플릿의 역할을 합니다.

일반적으로 볼 수 있는 몇 가지 정규식 예는 다음과 같습니다.

JScript VBScript 검색

/^\[ \t]*$/ "^\[ \t]*$" 빈 줄을 찾습니다.
/\d{2}-\d{5}/ "\d{2}-\d{5}" 2자리, 하이픈 및 5자리로 구성된 ID 번호를 찾습니다.
/<(.*)>.*<\/\1>/ "<(.*)>.*<\/\1>" HTML 태그를 찾습니다.

아래 표는 정규식 컨텍스트에 사용되는 모든 메타문자와 메타문자의 동작을 보여줍니다.

문자 설명

\ 그 다음 문자를 특수 문자, 리터럴, 역참조, 또는 8진수 이스케이프로 표시합니다. 예를 들어, "n"은 문자 "n"을 찾고 "\n"은 줄 바꿈 문자를 찾습니다. "\\" 시퀀스는 "\"를 찾고 "\("는 "("를 찾습니다.
^ 입력 문자열의 시작 위치를 찾습니다. Multiline 속성이 설정되어 있으면 ^는 '\n' 또는 '\r'앞의 위치를 찾습니다.
$ 입력 문자열의 끝 위치를 찾습니다. Multiline 속성이 설정되어 있으면 $는 '\n' 또는 'r'뒤의 위치를 찾습니다.
* 부분식의 선행 문자를 0개 이상 찾습니다. 예를 들어, "zo*"는 "z", "zoo" 등입니다. *는 {0,}와 같습니다.
+ 부분식의 선행 문자를 한 개 이상 찾습니다. 예를 들어, "zo+"는 "zo", "zoo" 등이지만 "z"는 아닙니다. +는 {1,}와 같습니다.
? 부분식의 선행 문자를 0개 또는 한 개 찾습니다. 예를 들어, "do(es)?"는 "do" 또는 "does"의 "do"를 찾습니다. ?는 {0,1}과 같습니다.
{ n } n 은 음이 아닌 정수입니다. 정확히 n 개 찾습니다. 예를 들어, "o{2}"는 "Bob"의 "o"는 찾지 않지만 "food"의 o 두 개는 찾습니다.
{ n ,} n 은 음이 아닌 정수입니다. 정확히 n 개 찾습니다. 예를 들어, "o{2}"는 "Bob"의 "o"는 찾지 않지만 "foooood"의 모든 o는 찾습니다. "o{1,}"는 "o+"와 같고, "o{0,}"는 "o*"와 같습니다.
{ n , m } m n 은 음이 아닌 정수입니다. 여기서 m n 보다 크거나 같습니다. 최소 n 개, 최대 m 개 찾습니다. 예를 들어, "o{1,3}"은 "fooooood"의 처음 세 개의 o를 찾습니다. "o{0,1}"은 "o?"와 같습니다. 쉼표와 숫자 사이에는 공백을 넣을 수 없습니다.
? 이 문자가 다른 한정 부호(*, +, ?, { n }, { n ,}, { n , m }) 의 바로 뒤에 나올 경우 일치 패턴은 제한적입니다. 기본값인 무제한 패턴은 가능한 많은 문자열을 찾는 데 반해 제한적인 패턴은 가능한 적은 문자열을 찾습니다. 예를 들어, "oooo" 문자열에서 "o+?"는 "o" 한 개만 찾고, "o+"는 모든 "o"를 찾습니다.
. "\n"을 제외한 모든 단일 문자를 찾습니다. "\n"을 포함한 모든 문자를 찾으려면 '[.\n]' 패턴을 사용하십시오.
( pattern ) pattern 을 찾아 검색한 문자열을 캡처합니다. 캡처한 문자열은 VBScript의 경우 SubMatches 컬렉션, Jscript의 경우 $0 ... $9 속성을 이용하여 결과로 나오는 Matches 컬렉션에서 추출할 수 있습니다. 괄호 문자인 ( )를 찾으려면 "\(" 또는 "\)"를 사용하십시오.
(?: pattern ) pattern 을 찾지만 검색한 문자열을 캡처하지 않습니다. 즉, 검색한 문자열을 나중에 사용할 수 있도록 저장하지 않는 비캡처 검색입니다. 이것은 패턴의 일부를 "or" 문자(|)로 묶을 때 유용합니다. 예를 들어, 'industr(?:y|ies)는 'industry|industries'보다 더 경제적인 식입니다.
(?= pattern ) 포함 예상 검색은 pattern 과 일치하는 문자열이 시작하는 위치에서 검색할 문자열을 찾습니다. 이것은 검색한 문자열을 나중에 사용할 수 있도록 캡처하지 않는 비캡처 검색입니다. 예를 들어, "Windows(?=95|98|NT|2000)"는 "Windows 2000"의 "Windows"는 찾지만 "Windows 3.1"의 "Windows"는 찾지 않습니다. 예상 검색은 검색할 문자열을 찾은 후 예상 검색 문자열을 구성하는 문자 다음부터가 아니라 마지막으로 검색한 문자열 바로 다음부터 찾기 시작합니다.
(?! pattern ) 제외 예상 검색은 pattern 과 일치하지 않는 문자열이 시작하는 위치에서 검색할 문자열을 찾습니다. 이것은 검색한 문자열을 나중에 사용할 수 있도록 캡처하지 않는 비캡처 검색입니다. 예를 들어, "Windows(?!95|98|NT|2000)"는 "Windows 3.1"의 "Windows"는 찾지만 "Windows 2000"의 "Windows"는 찾지 않습니다. 예상 검색은 검색할 문자열을 찾은 후 예상 검색 문자열을 구성하는 문자 다음부터가 아니라 마지막으로 검색한 문자열 바로 다음부터 찾기 시작합니다.
x | y x 또는 y 를 찾습니다. 예를 들어, "z|food"는 "z" 또는 "food"를 찾습니다. "(z|f)ood"는 "zood" 또는 "food"를 찾습니다.
[ xyz ] 문자 집합입니다. 괄호 안의 문자 중 하나를 찾습니다. 예를 들어, "[abc]"는 "plain"의 "a"를 찾습니다.
[^ xyz ] 제외 문자 집합입니다. 괄호 밖의 문자 중 하나를 찾습니다. 예를 들어, "[^abc]"는 "plain"의 "p"를 찾습니다.
[ a-z ] 문자 범위입니다. 지정한 범위 안의 문자를 찾습니다. 예를 들어, "[a-z]"는 "a"부터 "z" 사이의 모든 소문자를 찾습니다.
[^ a-z ] 제외 문자 범위입니다. 지정된 범위 밖의 문자를 찾습니다. 예를 들어, "[^a-z]"는 "a"부터 "z" 사이에 없는 모든 문자를 찾습니다.
\b 단어의 경계, 즉 단어와 공백 사이의 위치를 찾습니다. 예를 들어, "er\b"는 "never"의 "er"는 찾지만 "verb"의 "er"는 찾지 않습니다.
\B 단어의 비경계를 찾습니다. "er\B"는 "verb"의 "er"는 찾지만 "never"의 "er"는 찾지 않습니다.
\c x X 가 나타내는 제어 문자를 찾습니다. 예를 들어, \cM은 Control-M 즉, 캐리지 리턴 문자를 찾습니다. x 값은 A-Z 또는 a-z의 범위 안에 있어야 합니다. 그렇지 않으면 c는 리터럴 "c" 문자로 간주됩니다.
\d 숫자 문자를 찾습니다. [0-9]와 같습니다.
\D 비숫자 문자를 찾습니다. [^0-9]와 같습니다.
\f 폼피드 문자를 찾습니다. \x0c와 \cL과 같습니다.
\n 줄 바꿈 문자를 찾습니다. \x0a와 \cJ와 같습니다.
\r 캐리지 리턴 문자를 찾습니다. \x0d와 \cM과 같습니다.
\s 공백, 탭, 폼피드 등의 공백을 찾습니다. "[ \f\n\r\t\v]"와 같습니다.
\S 공백이 아닌 문자를 찾습니다. "[^ \f\n\r\t\v]"와 같습니다.
\t 탭 문자를 찾습니다. \x09와 \cI와 같습니다.
\v 수직 탭 문자를 찾습니다. \x0b와 \cK와 같습니다.
\w 밑줄을 포함한 모든 단어 문자를 찾습니다. "[A-Za-z0-9_]"와 같습니다.
\W 모든 비단어 문자를 찾습니다. "[^A-Za-z0-9_]"와 같습니다.
\x n n 을 찾습니다. 여기서 n 은 16진수 이스케이프 값입니다. 16진수 이스케이프 값은 정확히 두 자리여야 합니다. 예를 들어, '\x41'은 "A"를 찾고 '\x041'은 '\x04'와 "1"과 같습니다. 정규식에서 ASCII 코드를 사용할 수 있습니다.
\ num num 을 찾습니다. 여기서 num 은 양의 정수입니다. 캡처한 문자열에 대한 역참조입니다. 예를 들어, '(.)\1'은 연속적으로 나오는 동일한 문자 두 개를 찾습니다.
\ n 8진수 이스케이프 값이나 역참조를 나타냅니다. \ n 앞에 최소한 n개의 캡처된 부분식이 나왔다면 n 은 역참조입니다. 그렇지 않은 경우 n 이 0에서 7 사이의 8진수이면 n 은 8진수 이스케이프 값입니다.
\ nm 8진수 이스케이프 값이나 역참조를 나타냅니다. \ nm 앞에 최소한 nm개의 캡처된 부분식이 나왔다면 nm 은 역참조입니다. \ nm 앞에 최소한 n개의 캡처가 나왔다면 n 은 역참조이고 뒤에는 리터럴 m이 옵니다. 이 두 경우가 아닐 때 n과 m이 0에서 7 사이의 8진수이면 \ nm 은 8진수 이스케이프 값 nm을 찾습니다.
\ nml n 이 0에서 3 사이의 8진수이고 m l 이 0에서 7 사이의 8진수면 8진수 이스케이프 값 nml 을 찾습니다.
\u n n 은 4 자리의 16진수로 표현된 유니코드 문자입니다. 예를 들어, \u00A9는 저작권 기호(©)를 찾습니다.



--------------------------------------------------------------------------------
Visual Basic Scripting Edition에서 정규 표현식 기능 이용하기
--------------------------------------------------------------------------------

정규 표현식이란 무엇인가요?
정 규 표현식이란 무엇일까요? 정규 표현식은 복잡한 패턴 매칭 기능과 텍스트형 검색-대체 알고리즘을 개발할 수 있는 툴을 제공합니다. Perl, egrep, awk, 또는 sed 개발자에게 정규 표현식이 무엇이냐고 물어보면, 정규 표현식은 텍스트와 데이터를 조작 할 때 사용할 수 있는 가장 강력한 유틸리티라고 대답할 것입니다. 개발자는 패턴을 만들어 특정 문자열을 매치키시킴으로써 데이터를 검색하거나 추출하거나 교체하는 일을 완벽하게 제어할 수 있습니다. 간단히 말해서, 정규 표현식을 정복하면 데이터도 정복할 수 있는 것입니다.

여기서는, VBScript 정규 표현식과 관련된 모든 개체를 설명하고, 일반적인 정규 표현식 패턴을 간략하게 살펴보고, 실제 코드로 정규 표현식을 사용하는 예를 들어보도록 합시다.

VBScript RegExp 개체
VBScript 5.0 버전은 정규 표현식을 하나의 개체로서 제공합니다. VBScript RegExp 개체는 설계 면에서 JScript의 RegExp 및 String 개체와 비슷하고, 구문 면에서는 Visual Basic과 일치합니다. 먼저, VBScipt RegExp 개체의 속성 과 메소드에 관해 알아봅시다. VBScript RegExp 개체는 사용자에게 세 개의 속성과 세 개의 메소드를 제공합니다.

속성  메소드  
Pattern Test(검색-문자열)  
IgnoreCase  Replace (검색-문자열, 대체-문자열)  
Global  Execute (검색-문자열  

Pattern - 정규 표현식을 정의하는 데 사용되는 문자열. 이 속성은 정규 표현식 개체를 사용하기 전에 먼저 설정해야 합니다. Pattern에 관한 내용은 아래에 자세히 설명되어 있습니다.
IgnoreCase - 문자열 안에서 일치하는 문자가 발생할 모든 가능성에 대해 정규 표현식을 테스트해야 하는지를 나타내는 부울 논리 속성입니다. IgnoreCase의 기본 설정 값은 False입니다.
Global - 문자열 안에서 일치하는 문자가 발생할 모든 가능성에 대해 정규 표현식을 테스트해야 하는지 여부를 나타내는 읽기 전용 부울 논리 속성입니다. Global의 기본 설정 값은 False입니다.
Test (문자열) - Test 메소드는 문자열을 매개 변수로 받아 그 문자열이 정규 표현식에 일치하면 True를 반환하고 그렇지 않으면 False를 반환합니다.
Replace (검색-문자열, 대체-문자열) - Replace 메소드는 두 개의 문자열을 매개 변수로 받습니다. 검색-문자열 안에 정규 표현식과 일치하는 문자열이 있으면, 그 문자열을 대체-문자열로 바꾸고, 바뀐 새로운 문자열을 반환합니다. 만일 일치하는 문자열이 없으면, 원래의 검색-문자열을 반환합니다.
Execute (검색-문자열) - Execute 메소드는 Matches 컬렉션 개체를 반환하는 점만 제외하면 Replace 메소드의 작동과 비슷합니다. Matches 컬렉션 개체에는 정규 표현식에 일치하는 각 문자열 에 대한 Match 개체가 들어 있습니다. 이 메소드는 원래의 문자열을 변경하지 않습니다.
더 자세한 내용과 예제 코드는,Microsoft Scripting Site  사이트를 참고하시기 바랍니다.

VBScript Matches 컬렉션 개체
앞에서 말했듯이, Matches 컬렉션 개체는 Execute 메소드를 실행한 경우에만 반환됩니다. 이 컬렉션 개체는 0개 이상의 Match 개체를 포함할 수 있으며, 이 개체의 속성은 읽기 전용입니다.

속성  
Count  
Item  

Count -컬렉션 안에 있는 Match 개체의 개수를 나타내는 읽기 전용 값입니다.
Item - Matches 컬렉션 개체에서 Match 개체를 임의로 액세스할 수 있게 만드는 읽기 전용 값입니다. For-Next 루프를 사용하면, Matches 컬렉션 개체에서 Match 개체를 순서대로 액세스할 수도 있습니다.
더 자세한 내용과 예제 코드는, Microsoft Scripting Site  를 참고하시기 바랍니다.

VBScript Match 개체
각 Mathes 개체에는 0개 이상의 Match 개체가 들어 있습니다. 이 Match 개체들은 정규 표현식을 사용했을 때 성공적으로 일치한 문자열 을 나타냅니다. 이 개체의 속성은 읽기 전용이며 일치하는 각 문자열에 대한 정보를 저장합니다.

속성  
FirstIndex
Length  
Value  

FirstIndex - 원래 문자열 안에서 정규 표현식에 일치하는 문자열의 위치를 나타내는 읽기 전용 값입니다. 이 색인은 위치를 기록하는데 0 기준 오프셋(문장의 첫 위치가 0번째임을 뜻함)을 사용합니다.
Length - 일치된 문자열의 전체 길이를 나타내는 읽기 전용 값입니다
Value - 일치된 값이나 텍스트를 나타내는 읽기 전용 값입니다. 이 값은Match 개체를 액세스할 때 사용되는 기본 값이기도 합니다.
더 자세한 내용과 예제 코드는, Microsoft Scripting Site  를 참고하시기 바랍니다.

패턴은 어떤 형태인가?
자, 지금까지는 이 모든 것이 지나치게 훌륭하고 환상적인 것으로 느껴지셨겠지만 실제는 어떨까요? 정규 표현식은 그 자체가 하나의 언어 라고 할 수 있지만, Perl에 익숙한 사용자들이라면 누구나 쉽게 사용할 수 있습니다. VBScript는 Perl로부터 패턴 셋을 유도하기 때문에, 주요 기능도 Perl과 비슷합니다. 그러면, 정규 표현식을 정의하는 데 사용되는 패턴 셋 몇 가지를 살펴보도록 합시다. 패턴 셋은 여러 범주와 영역으로 분류할 수 있습니다.

포지션 매칭

포지션 매칭은 ^와 $ (을)를 사용하여 문자열의 시작이나 끝을 검색합니다. 패턴 속성을 "^VBScript"로 설정할 경우, "VBScript is cool."에는 일치하지만, "I like VBScript."에는 일치하지 않습니다.

기호 기능
^ 문자열의 시작만 비교합니다

"^A"는 "An A+ for Anita."의 첫번째 "A"를 비교합니다.  
$  문자열의 끝을 비교합니다.

"t$"는 "A cat in the hat"의 마지막 "t"를 비교합니다.  
\b  임의의 워드 영역을 비교합니다

"ly\B"는 "possibly tomorrow."의 "ly"를 비교합니다  
\B  Matches any non-word boundary




리터럴

리 터럴은 영숫자 문자, ASCII, 8진수 문자, 16진수 문자, UNICODE, 또는 특수 구분 문자 등을 모두 총칭하는 말입니 다. 특별한 의미를 갖고 있는 몇몇 문자는 구분해야 합니다. 이들 특수 문자를 비교하려면, 정규 표현식을 문자 앞에 \를 사용해야 합니다.

기호 기능
영숫자  영문자와 숫자를 비교합니다.  
\n  새로운 라인을 비교합니다  
\f  용지 공급을 비교합니다  
\r  캐리지 리턴을 비교합니다.
\t  가로 탭을 비교합니다.  
\v  수평 탭을 비교합니다.  
\?  ?(을)를 비교합니다.  
\*  *(을)를 비교합니다.  
\+  +(을)를 비교합니다.  
\.  . (을)를 비교합니다.  
\|  |(을)를 비교합니다.
\{  {(을)를 비교합니다.  
\}  }(을)를 비교합니다.  
\\  \(을)를 비교합니다.  
\[  [(을)를 비교합니다.  
\]  ] (을)를 비교합니다.  
\(  ((을)를 비교합니다.  
\)  ) (을)를 비교합니다.
\xxx  8진수 xxx로 표시된 ASCII 문자를 비교합니다.

"\50"은 "(" 또는 chr (40) (을)를 비교합니다.  
\xdd  16진수 dd로 표시된 ASCII 문자를 비교합니다.

"\x28"은 "(" 또는 chr (40) (을)를 비교합니다.  
\uxxxx  UNICODE xxxx로 표시된 ASCII 문자를 비교합니다.

"\u00A3"은 "&pound;"를 비교합니다.  

문자 클래스

문 자 클래스를 사용하면 괄호 [] 안에 식을 삽입하여 사용자에 의해 정의된 그룹을 만들 수 있습니다. 문자 클래스의 문자들을 제외한 나머지 문자들을 사용하려면 [] 안에 ^(을)를 첫번째 문자로 삽입해야 합니다. 또한, 문자의 범위를 지정할 때는 대시를 사용합 니다. 예를 들어, 정규 표현식 "[^a-zA-Z0-9]"(은)는 영문자와 숫자를 제외한 모든 문자를 비교합니다. 추가로 구분 문 자와 리터럴로 묶인 문자셋도 있습니다.


기호 기능
[xyz] 문자셋 안에 포함되어 있는 임의의 한 문자를 비교합니다.

"[a-e]" (은)는 "basketball" 안의 "b"를 비교합니다.
[^xyz]  문자 셋 안에 포함되어 있지 않은 임의의 한 문자를 비교합니다.

"[^a-e]"는 "basketball" 안의 "s"를 비교합니다.  
.  \n을 제외한 임의의 문자를 비교합니다.  
\w  임의의 워드 문자를 비교합니다.
[a- zA-Z_0-9]와 동일함.  
\W  워드 문자를 제외한 임의의 문자를 비교합니다.
[^a-zA-Z_0-9]와 동일함.
\d  임의의 숫자를 비교합니다. [0-9].  
\D  숫자를 제외한 임의의 문자를 비교합니다.
[^0-9]와 동일함.
\s  임의의 공백 문자를 비교합니다.
[ \t\r\n\v\f]와 동일함.  
\S  공백 문자가 아닌 임의의 문자를 비교합니다.
[^ \t\r\n\v\f]와 동일함.  

반복

반복 매칭을 사용하면 정규 표현식 안에 있는 특정 절에 대한 검색을 여러 번 수행할 수 있습니다. 반복 매칭에서는 어떤 요소가 정규 표현식 안에서 몇 번 반복될 것인지를 지정할 수 있습니다.

기호 기능  
{x}  {x} 정규 표현식을 x번 비교합니다.

"\d{5}"는 5개의 숫자를 비교합니다.
(x,}  정규 표현식을 x번 이상 비교합니다.

"\s{2,}"는 최소한 두 개의 공백 문자를 비교합니다
{x,y}  정규 표현식을 x부터 y번까지 비교합니다.

"\d{2,3}"는 2개 이상 3개 미만의 숫자를 비교합니다. . 
?  0번 또는 한 번 비교합니다. {0,1}와 동일함.

"a\s?b"는 "ab" 또는 "a b"를 비교합니다.
*  0번 이상 비교합니다. {0,}와 동일함.  
+  한번 이상 비교합니다.{1,}과 동일함.  


교체와 그룹핑

교체와 그룹핑은 보다 복잡한 정규 표현식을 만들 때 사용합니다. 교체와 그룹핑 기술은 정규 표현식 안에 복잡한 절을 만들고, 보다 많은 융통성과 제어 능력을 제공합니다.

기호 기능  
()  절을 그룹핑하여 절을 만듭니다. 중첩하여 사용할 수도 있습니다.

"(ab)?(c)"는 "abc" 또는 "c"를 비교합니다.  
|  교체는 여러 절을 하나의 정규 표현식으로 조합한 다음 개별적인 절을 비교합니다.

"(ab)|(cd)|(ef)"는 "ab" 또는 "cd" 또는 "ef"를 비교합니다.

역방향 참조

프 로그래머는 역방향 참조를 통해 정규 표현식의 일부를 다시 참조할 수 있습니다. 그 방법은 괄호와 백슬레시(\) 뒤에 한 개의 숫자 를 사용하는 것입니다. 첫 번째 괄호 절은 \1로 참조되고 두 번째 괄호 절은 \2로 참조되는 식입니다.

기호 기능  
()\n  왼쪽 괄호에 있는 표현식을 n번 반복해서 문장을 비교합니다.

"(\w+)\s+\1"는 "hubba hubba" 같이, 한 열 안에서 두 번 나타나는 임의의 워드를 비교합니다.."  

예제로 확인하기!
이 예제는 지금까지 설명한 것을 적용한 것으로, 정규 표현식을 이용하여 유효한 입력 값이 입력되어 있는지 검사하는 간단한 응용 프로그 램입니다. 사용자가 유효한 값을 입력할 때까지 사용자에게 입력을 요구하는 프롬프트가 반복적으로 나타납니다. 먼저 초기 패턴을 자세 히 설명하겠습니다.

"^\s*((\$\s?)|(&pound;\s?))?((\d+(\.(\d\d)?)?)|(\.\d\d))\s*(UK|GBP|GB|USA|US|USD)?)\s*$"

"^\s*…" 와 "…\s*$" - 앞과 뒤에 몇 개의 공백 문자든지 올 수 있음을 나타내며, 입력은 반드시 라인 자체 위에 있어야 합니다.
"((\$\s?)|(?\s?))?" - 옵션 공백 앞에 오는 옵션 $ 또는 £ 기호를 나타냅니다..
"((\ d+(\.(\d\d)?)?)|(\.\d\d))" - 생략 가능한 십진수 소수점 2자리 또는 십진수 소수점 2 자리수 앞에 오는 한 자리 이상의 숫자를 찾습니다. 이 말은 6., 23.33, .88와 같은 숫자는 사용 가능하나 5.5는 사용할 수 없음을 의미합 니다.
"\s*(UK|GBP|GB|USA|US|USD)?" - 문자열에 대하여 생략 및 사용이 가능하고 인수 앞에서 유효한 공백 문자의 수를 의미합니다.
본 예제의 경우, 정규 표현식은 사용자의 US 달러 또는 영국 파운드 입력 여부를 결정하는 데 사용됩니다. 필자는 £, UK, GBP, 또는 GB 문자열을 검색하고 있습니다. 정규 표현식 결과가 참이면 사용자는 영국 파운드 단위의 액수를 입력한 것이라고 보면 됩니다. 그렇지 않다면 USD 통화를 사용한 것이겠지요.

이 코드를 사용하려면 코드를 CurrencyEx.vbs로 저장하고 Windows Script Host를 이용해 코드를 실행시킨 다음 VB에 복사하거나(이 경 우, Microsoft VBScript 정규 표현식에 참조를 추가할 필요가 있음) HTML 파일에 코드를 포함시킵니다.

Sub CurrencyEx
Dim inputstr, re, amt
Set re = new regexp  'Create the RegExp object

'Ask the user for the appropriate information
inputstr = inputbox("I will help you convert USA and CAN currency. Please enter the amount to convert:")
'Check to see if the input string is a valid one.
re.Pattern = "^\s*((\$\s?)|(&pound;\s?))?((\d+(\.(\d\d)?)?)|(\.\d\d))\s*(UK|GBP|GB|USA|US|USD)?)\s*$"
re.IgnoreCase = true
do while re.Test(inputstr) <> true
'Prompt for another input if inputstr is not valid
inputstr = inputbox("I will help you convert USA and GBP currency. Please enter the amount to(USD or GBP):")

loop
'Determine if we are going from GBP->US or USA->GBP
re.Pattern = "&pound;|UK|GBP|GB"
if re.Test(inputstr) then
'The user wants to go from GBP->USD

re.Pattern = "[a-z$&pound; ]"
re.Global = True
amt = re.Replace(inputstr, "")
amt = amt * 1.6368
amt = cdbl(cint(amt * 100) / 100)
amt = "$" & amt
else
'The user wants to go from USD->GBP

re.Pattern = "[a-z$&pound; ]"
re.Global = True
amt = re.Replace(inputstr, "")
amt = amt * 0.609
amt = cdbl(cint(amt * 100) / 100)
amt = "&pound;" & amt
end if

msgbox ("Your amount of: " & vbTab & inputstr & vbCrLf & "is equal to: " & vbTab & amt)
End sub


더욱 강력한 파워를!
Visual Basic 개발자들이 정규 표현식을 사용할 수 있도록 VBScript 정규 표현식 엔진은 COM 개체로 구현되어 왔습니다. 이 경우, 정규 표현식은 보다 강력한 힘을 발휘하게 되는데 즉, Visual Basic 또는 C와 같은 VBScript 외의 다양한 소스로부터 호 출이 가능하기 때문입니다. 예컨대, 필자는 Outlook(R) 97, Outlook 98 또는 Outlook 2000의 접속 목록 을 통해 내용을 추적하고 특정 도시에 사는 접속자 이름을 반환하는 작은 Visual Basic 응용 프로그램을 만든 경험이 있습니 다.

이 프로그램은 매우 간단합니다. 먼저 사용자는 검색할 대상 도시명을 입력하고, 구분 표시에는 쉼표를 사용합니 다. 그런 다음, Outlook에 작성할 새 접속 폴더의 이름을 입력합니다. 각 접속이 일치하면 이 내용은 새로 작성된 접속 폴더 에 복사됩니다.

Microsoft VBScript 정규 표현식 개체 라이브러리에 참조를 추가할 경우 몇 가지 유용한 조기 바인딩 기능(early binding)을 사용할 수 있습니다. 이 조기 바인딩 개체는 몇 가지 이점을 제공하는데 즉, 속도 가 빠르고 코딩 프로그램 사용이 간편하다는 점입니다. "new RegExp"가 즉시 사용되므로 사용자는 개체에 참조를 추가하고 VBScript코드를 오려내어 VB에 그대로 붙일 수 있습니다.

이러한 이유로 필자 또한 정규 표현식과 동일한 방 법을 사용하여 Outlook 9.0 개체 라이브러리를 참조한 적이 있습니다. 물론, 여러분은 여전히 CreateObject() (을)를 사용하여 COM 호출을 생성시킬 수도 있으나 상기 방법을 더 간편하게 사용할 수 있을 것입니다. 이 개체들을 작성한 후  간단한 코드를 사용하여 도시명과 일치하는 폴더와 트리를 액세스할 수 있습니다. 본인은 2개의 모음 개체를 가지는 작은 도움 함수 compareCollectionObjects(x,y)(을)를 사용/비교하여 일치 여부를 확인합니다.

이 프로그램을 사용하려면 단순히 코드를 VB(참조 추가에 필요함)에 복사한 다음 FindCityContacts() 함수를 호출하면 됩니다. .


Sub FindCityContacts()

   Dim strTemp
   Dim index
  Dim citySearch
   Dim myNameSpace, myContacts, newCityContacts, newCityContactsName
   Dim contact
   Dim newContact

   'Set the early binding objects
   Dim re as New RegExp  
   Dim myApp as New Outlook.Application

   re.Global = True
   re.IgnoreCase = True

   citySearch = InputBox("Please enter the cities of your search, separated by commas.")
   newCityContactsName = InputBox("Please enter the new contact folder name")

   'Set some of the objects and create the new Contacts folder
   Set myNameSpace = myApp.GetNamespace("MAPI")
  'olFolderContacts = 10
   Set myContacts = myNameSpace.GetDefaultFolder(10)  
   Set newCityContacts = myContacts.Folders.Add(newCityContactsName)

   'Set cities, using regular expressions to contain the city names
   re.Pattern = "[^,]+"
  Set cities = re.Execute(citySearch)
   For Each city In cities

      'Set citytokens to be the individual tokens in the city name
      'Then we compare them to the address tokens in each contact
       re.Pattern = "[^ ]+"
       Set citytokens = re.Execute(city)

       For i = 1 to myContacts.Items.Count
           re.Pattern = "[^ ]+"
           Set contact = myContacts.Items.Item(i)

           Set HomeAddressCityTokens = re.Execute(contact.HomeAddressCity)
           If compareCollectionObjects(HomeAddressCityTokens, citytokens) = 1 Then

               Set newContact = contact.Copy
               newContact.Move newCityContacts
           End If

           Set OtherAddressCityTokens = re.Execute(contact.OtherAddressCity)
           If compareCollectionObjects(OtherAddressCityTokens, citytokens) = 1 Then
               Set newContact = contact.Copy
               newContact.Move newCityContacts
           End If

           Set BusinessAddressCityTokens = re.Execute(contact.BusinessAddressCity)
          If compareCollectionObjects(BusinessAddressCityTokens, citytokens) = 1 Then
               Set newContact = contact.Copy
              newContact.Move newCityContacts
           End If
       Next
  Next

MsgBox "done"

End Sub

'This function is provided as a helper-function
' to compare two collection objects.
Function compareCollectionObjects(x, y)

   Dim index
   Dim flag
   flag = 1

   If x.Count <> y.Count Then
       flag = 0
  Else
       index = x.Count

       For i = 0 To (index - 1)
           If StrComp(x.Item(i), y.Item(i), 1) Then
               flag = 0
           End If
       Next
   End If

   compareCollectionObjects = flag

End Function


넘치는 정보!
앞 에서 보았듯이, Microsoft는 정규 표현식(버전 5.0)을 이용하여 VBSscript를 강화시키는데, 이것은 VBScript 와 Jscript 비교에서 가장 중요한 부분이었습니다. 스크립팅 엔진 버전 5.0에서 우리는 VBScript의 기능을 향상시키는 데 특히 비중을 두었습니다. 이제 여러분은 정규 표현식을 추가시킴으로써 데이터를 보다 확실하게 관리하고 그 효과를 높일 수 있게 되었으며, 클라이언트와 서버에서 보다 강력한 웹 응용 프로그램을 만들 수 있게 되었습니다.

AND

IE7 CSS Hack

WEB/CSS 2007. 3. 19. 03:33

관련내용출처 : http://nanobox.chipx86.com/blog/2006/04/easy-css-hacks-for-ie7.php

IE6 이하에 대해서는
* html { … } 와 같이 사용합니다.

IE7 이하에 대해서는
*:first-child+html { … } * html { … } 와 같이 HTML 을 선택합니다.
(두개 같이 쓰라는 말 같습니다)

IE7 에만 적용되게 하려면
*:first-child+html { … } 와 같이 HTML 을 선택합니다.

IE7 과 기타 최신의 브라우저를 위해서는 (IE6 제외)
html>body { … } 와 같이 body 를 선택합니다.

IE7 을 제외한 최신의 브라우저에는
html>/**/>body { … } 와 같이 body를 선택합니다.

AND

CSS Hack

WEB/CSS 2007. 3. 19. 03:26
이 포스팅에서 언급하고 있는 CSS핵(hack)들은 대부분 옛날 브라우저들을 대상으로 한 것들이라 아마도 활용도가 그다지 높지 않으리라 생각하지만…해외사이트에 사용하고 있는 경우가 많으므로 알아두면 해외사이트를 분석할때도 상당히 도움이 되리라 생각한다. 또 CSS핵(hack)의 사용시 많은 주의를 기울여야 하며 CSS 문법상 맞지 않는 경우도 많으므로 주의하여야 한다. 일단 웹표준에 의한 사이트 제작이 익숙해지면 브라우저의 버그를 CSS핵이 아니라 CSS구조를 이용하여 회피하는 방법도 자연스럽게 익히게 되리라 생각한다. CSS핵은 정말 피치못한 경우에만 사용해야 한다.

Netscape 4 제외시키기
Netscape 4은 media속성값에 "screen"이외의 값이 올 경우 읽어 들이지 못하는 것을 이용한 방법이다.

이나

라고 지정할 경우 Netscape 4은 읽어 들이지 못한다.
부분적으로 읽어들이지 못하게 하는 경우에는 Caio's hack인 /*/*/를 이용한다. 보통 코멘트는 */으로 닫지만 /*/으로 닫게 되면 Netscape 4에서는 인식되지 않는다. 그 뒤에 평상시의 코멘트 /* */를 적어두면 그 뒤의 스타일은 Netscape 4에서도 문제없이 적용된다.
p {
/*/*/ color:white; /* */
}
 
Mac IE 4.5, Netscape 4 제외시키기
@import룰로 url()함수를 이용하여 외부 스타일시트를 이중인용부호로 지정한다.
Mac IE 4.5는 @import에 url()함수를 이용하는 경우, 단일 인용부호와 인용부호가 없는 것이 아니면 읽어 들이지 못한다. Netscape 4은 @import를 지원하지 않는다.
@import url("/css/style.css")
 
Mac IE 5 제외시키기
CSS소스 안의 코멘트 서식을 /* */ 이라는 방식으로 기술한다. holly hack이라고 하며 그 뒤에 평상시의 코멘트 /* */를 적어두면 그 뒤의 스타일은 Mac IE 5에서도 문제없이 적용된다.
p {
/* */ color:white; /* */
}

Win IE 4~5 제외시키기
셀렉터 바로 뒤에 /**/라고 적는다.
p/**/ { color:white;}
 

Win IE 4~5, Mac IE 4.5~5 제외시키기
프로퍼티와 값을 구분하는 콜론(;) 앞에 코멘트에 스페이스를 포함하여 /* */라고 적는다.
p { color/* */:white;}
 

Win IE 4~6, Mac IE 4, Netscape 4 제외시키기
셀렉터 앞에 html>body를 붙인다.
html>body p { color:white;}
 

Win IE 6 제외시키기
프로퍼티와 값을 구분하는 콜론(;)의 앞에, 스페이스와 코멘트를 /**/라고 적는다.
p { color /**/:white;}
star hack
셀렉트 앞에 *html를 붙이면, Win IE 4~6, Mac IE 4~5 등에는 스타일이 적용되고, 그 외의 브라우저에서는 적용되지 않는다.
*html p { color:white; }
underscore hack
프로퍼티의 가장 앞부분에 언더스코어(_)를 붙이면, Win IE 4~6에서 스타일이 적용되고, 다른 브라우저에서는 적용되지 않는다.
p { _color:white; }
hash hack
프로퍼티의 앞에 샾(#)을 붙이면, Win IE 4~6, Mac IE 5, Opera 7, Mozilla, Firefox에서는 스타일이 적용되고, 다른 브라우저에는 적용되지 않는다.
p { #color:white; }
star 7 hack
셀렉트의 앞에 html*을 붙이면, Win IE 5.5~6, Mac IE 5, Safari 등에서 스타일이 적용되고, 다른 브라우저에서는 적용되지 않는다. html*과 셀렉터사이에 스페이스를 넣지 않는다.
html*p { color:white; }
xmlns hack
속성셀렉터를 이용하여, html요소에 붙이는 xmlns속성을 스타일적용을 위하여 사용하는 방법.
Mozilla, Fire-fox, Opera 7/8, Safari 등 속성셀렉터를 서포트하는 브라우저에서는 스타일이 적용되고, 다른 브라우저에서는 적용되지 않는다.
html[xmlns] h1 { color:red; }
:root hack
셀렉터의 앞에 :root를 붙이면, Mozilla, Firefox, Mac IE 5, Safari 등 :root유사클래스를 지원하는 브라우저에만 스타일이 적용되고, 다른 브라우저에서는 적용되지 않는다.
:root h1 { color:red; }
Tantek box model hack
voice-family프로퍼티를 이용한 가장 유명한 박스모델핵.
div#content {
width:500px;
voice-family: ""}"";
voice-family:inherit;
width:400px;
}
 

Win IE 5용 패스필터
@media tty {
i{content:"";/*" "*/}}; @import '/css/style.css'; {;}/*";}
}/* */Win IE 5.5용 패스필터
@media tty {
i{content:"";/*" "*/}}@m; @import '/css/style.css';/*";}
}/* */Win IE 5-5.5용 패스필터
@media tty {
i{content:"";/*" "*/}}@import '/css/style.css';/*";}
}/* */모던브라우저용 패스필터
@import "null?"{";
@import "/css/style.css";
@import "null?"}";이 이외에도 많은 핵(hack)이 존재한다. CSS Filters (dithered.com)에 다양한 CSS hack이 잘 정리되어 있으므로 참고하시길…
2006년 7월 18일, IE7용의 핵(hack)을 추가.
IE7에만 적용
IE7에만 다른 스타일을 적용하는 방법은 해당 셀렉터의 앞에
*+html body이나(*+html body는 Opera8~에도 적용되어 버리는 문제가 있기에 *+html>/**/body로 Opera8~ 전용 스타일을 기술하여야 한다. 참조:IE7のCSSバグとOpera CSS Hack)
*:first-child+html을 기술한 다음 해당 셀렉터와 스타일을 작성하면 된다. 예를 들어 #banner라는 id셀렉터에 적용시키는 경우
*:first-child+html #banner {
      :
  [IE7용 스타일을 기술]
      :
}라고 기술한다. IE7이외의 브라우저를 위한 원래의 #banner 스타일 설정은 IE7용 스타일 설정 앞에 기술한다(순서가 바뀌면 원하는 효과를 얻지 못한다. 참조:IE7 の CSS ハック)
#banner {
      :
  [IE7이외의 브라우저를 위한 스타일을 기술]
      :
}
*:first-child+html #banner {
      :
  [IE7용 스타일을 기술]
      :
}IE 6 and below (IE6이하)
* htmlIE 7 and below (IE7이하)
*:first-child+html, * htmlIE 7 only (IE7전용)
*:first-child+htmlIE 7 and modern browsers only (IE7과 모던브라우저)
html>bodyModern browsers only (not IE 7) (IE7이외의 모던 브라우저)
html>/**/bodyRecent Opera versions 9 and below (최근의 Opera9이하)
html:first-childSafari에만 적용
/* XXX */로 코멘트 아웃하고 html:66irst-child를 덧붙임으로써 Safari에만 CSS가 적용된다.
/* safari only */
html:66irst-child div.globalContainer{
margin: 0 0 0 18px;
}
/* end */


출처 : http://www.nmindplus.com
AND

AND

프로젝트 순서

DB 2007. 3. 6. 16:15
프로젝트 순서
1.프로젝트 주제 선정
2.프로젝트의 데이터 흐름
(2~3 2일)
3.DB(table)스키마 작성
4.화면(페이지) Flow Chart 작성(1일)
5.개발(2주)
6.기능별 테스트(6~7 1주)
7.종합취합 테스트
8.발표
AND