'팁&테크/ETC'에 해당되는 글 32건

  1. 2009.03.27 VMware 내부 OS 에 접속하기
  2. 2008.12.16 레일스 파일(이미지) 업로드 방법들
  3. 2008.12.16 루비 온 레일스로 파일업로딩
  4. 2007.10.20 MIME 타입 정리
  5. 2007.09.14 input에서 영문,숫자,특수문자만 입력받으려 할경우
  6. 2007.09.14 XML-RPC 관련문서 링크
  7. 2007.06.29 정규표현식 기초
  8. 2007.06.29 정규표현식 기초
  9. 2007.06.29 정규표현식의 기본 문법
  10. 2007.06.29 Ascii 특수문자
2009. 3. 27. 17:45

VMware 내부 OS 에 접속하기

CentOS 에 APM 을 설치할 것입니다. VMware 에 설치한 CentOS에 접속하는 방법을 먼저 알아 보겠습니다.
Host PC 에서 CentOS에 연결하는 것과 Host PC가 아닌 외부에서 접속하는 두가지 방법을 알아 보겠습니다.
우선 Host PC에서는 별다른 설정없이 CentOS에 할당한 ip 주소로 연결이 가능합니다.

CentOS 를 설치할때 DHCP로 ip를 할당하는 방식을 선택했기때문에 CentOS를 부팅할때마다 ip주소가 바뀔수 있습니다. 그러면 매번 ip를 확인해야 되니깐 아주 번거롭겠지요. 그래서 우선 고정 ip 방식으로 변경해야 합니다.

우선 게이트웨이를 알아야 하는데 VMware 에서 Edit > Virtual Network Editor > NAT 탭보시면 Gateway IP address 를 알수 있습니다. 그럼 아이피를 그 대역에 맞게 설정하시면 되겠습니다.

system-config-network 명령을 실행하여 DHCP 로 설정된 부분을 고정아이피로 변경해 줍시다.
DHCP 체크를 해제 하고
ip주소 : 192.168.11.3 (3~255 아무 값이나)
서브넷마스크 : 255.255.255.0
게이트웨이 : 192.168.11.2
라고 입력한 후에 /etc/init.d/network restart 명령으로 네트웍을 재시작 합니다.

자 그럼 외부에서 접속하는 설정은 모두 끝이 났습니다.
그럼 Host PC 에서 VMware 내의 CentOS에 접속하기 위해서는 192.168.11.3 의 주소로 연결하면 되겠습니다.

그럼 이제부터는 외부에서 VMware 내의 CentOS에 접속하는 방법을 알아보도록 하겠습니다.
이방법은 Host PC의 포트를 VMware 의 Port로 포워딩 하는 방법입니다.
간단한 예로 VMware 내의 CentOS 에 ftp로 연결 하려고 한다면 Host PC에 ftp연결을 하면 자동으로 VMware 내의 CentOS ftp로 연결을 해주는 것이지요.
외부PC --------> Host PC ---------> VMware(CentOS)


Edit > Virtual Network Editor 메뉴를 클릭합니다.


NAT 탭에 Edit 버튼을 클릭합니다.


Port Forwarding 을 클릭합니다.


각각 사용할 포트를 포워딩 합니다.
Host Port 는 실제 PC의 포트를 입력하고 아이피주소에는 아이피주소는 아까 입력한 192.168.11.3 을 Port 에는 VMware에 설치한 리눅스에서 연결되는 포트를 입력하지면 됩니다.

예로 ssh로 다른 PC에서 Host PC에 접속을 하게 되면 자동으로 192.168.11.3 의 22번 포트로 연결을 해주게 되는 것입니다. (주의 : Host PC 의 방화벽으로 Port 가 막혀있으면 Port를 풀어주셔야 됩니다.)


정상적으로 접속하는 모습을 보실 수 있습니다.


2008. 12. 16. 14:38

레일스 파일(이미지) 업로드 방법들

웹 상에서 파일을 업로드하는 것 자체는 RFC1867만 구현하면 되는 간단한 문제이지만, 최근에는 다양한 방식으로 이미지를 업로드할 일들이 많이 생겨남에 따라 레일스에도 제법 많은 플러그인들이 생겨났다. 물론 가장 고전적이고 대중적인 것은 attachment_fu 겠지만(그보다 더 이전의 것들도 몇 있긴하다), 만약 용도가 이미지 처리에 맞춰져 있다면 다른 대안을 사용하는 것도 좋은 방법이다.

플러그인명
특징
주요 유스케이스
이미지 처리 방식
파일 저장소
attatchment_fu

가장 잘 알려지고, 비교적 오래된 업로드 플러그인의 고전

파일, 이미지
(범용)
RMagick
ImageScience
mini_magic
파일시스템
Database
Amazon S3
UploadColumn 또 하나의 멋진 업로드 플러그인
파일, 이미지
(주로 이미지)
RMagick, ImageScience
파일시스템
PaperClip
+ 아주 간단한 이미지 전용 플러그인
- (디폴트) 파일시스템이 너무 선형으로 늘어나는 경향이 있음
이미지
(Avatar, thumbnail 등 간단한 이미지 업로드에 적합)
ImageMagick
(RMagick 불필요)
파일시스템
Amazon S3
FlexImage
+ *.flexi 라는 템플릿을 사용하는 독특한 이미지 렌더링 방식을 갖추고 있어서 제목 그대로 아주 유연한 이미지 조작이 가능
+ MagicColumn 기능도 멋짐!
이미지
(특히 이미지에 워터마크를 넣는다거나 기타 ImageMagick을 사용한 여러가지 조작이 필요한 경우에 적당함)
RMagick
파일시스템 권장
Database도 가능

[출처] http://thinkr.egloos.com/1990365
2008. 12. 16. 14:09

루비 온 레일스로 파일업로딩

원본은  http://www.tutorialspoint.com/ruby-on-rails/rails-file-uploading.htm 이고,
대충 번역했다.




Rails를 이용한 파일업로딩


레일즈 명령어를 이용해 어플리케이션 본체 생성

C:\ruby> rails upload

업로드될 파일의 위치 결정. 이 자료들은 공용 구역에 저장됨
디렉터리를 만들고 퍼미션 체크


C:\ruby> cd upload
C:\ruby> mkdir upload\public\data
 

다음은 컨트로러와 모델 생성

모델 생성:
DB기반 어플리케이션이 아니기 때문에 아무 이름가능. DataFile 모델로 만듬.
(주:테이블에 대한 1또는 n에 대한 단/복수형 모델명을 지정을 해야되기 때문에..?)


C:\ruby> ruby script/generate model DataFile
      exists  app/models/
      exists  test/unit/
      exists  test/fixtures/
      create  app/models/data_file.rb
      create  test/unit/data_file_test.rb
      create  test/fixtures/data_files.yml
      create  db/migrate
      create  db/migrate/001_create_data_files.rb


data_file.rb 모델 파일에서 불러질 메소드(액션메소드?)를 생성한다.
이 메소드는 어플리케이션 컨트롤러에서 사용될 것이다.


class DataFile < ActiveRecord::Base
  def self.save(upload)
    name =  upload['datafile'].original_filename
    directory = "public/data"
    # create the file path
    path = File.join(directory, name)
    # write the file
    File.open(path, "wb") { |f| f.write(upload['datafile'].read) }
  end
end


위 함수는 CGI 객체 [업로드]를 받고 업로드된 파일명을 [original_filename] 함수를
이용해서 추출해(extract)주고, "public/data" 디렉터리에 저장될 것이다.
또한 [content_type] 함수를 이용해서 미디어 형식(mime?)을 불러올 수 있다.
 

여기서 [File]은 루비 객체이고 디렉터리명과 파일명을 합쳐서
전체파일경로(full file path) 를 리턴한다.


그 다음, File 객체에서 제공해주는 함수로 쓰기모드(write mode)로 연다.
또한 읽어진 파일을 출력파일로 쓸 수 있다.


컨트롤러 생성:
업로드용 컨트롤러 생성


C:\ruby> ruby script/generate controller Upload
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/upload
      exists  test/functional/
      create  app/controllers/upload_controller.rb
      create  test/functional/upload_controller_test.rb
      create  app/helpers/upload_helper.rb
 

Now we will create two controller functions first function index will call a view file to take user input and second function uploadFile takes file information from the user and passes it to the 'DataFile' model. We set the upload directory to the 'uploads' directory we created earlier "directory = 'data'".

2개의 컨트롤러 함수를 만들건데, 하나는 뷰 파일에서 입력을 받을 [index] 이고,
다른 함수는 [uploadFile]로, 사용자가 DataFile 모델을 통해 올려진 파일의 정보를
얻는 것이다. 앞에서, uploads 디렉터리에 저장하기위해 "directory = data" 로 했다.
 

class UploadController < ApplicationController
  def index
     render :file => 'app\views\upload\uploadfile.rhtml'
  end
  def uploadFile
    post = DataFile.save(params[:upload])
    render :text => "File has been uploaded successfully"
  end
end
 

불러올 함수를 모델파일에 정의한다. [render] 함수는 view 파일로 메시지를
되돌려서 보여준다.


뷰 생성:
마지막으로 컨트롤러에서 언급한 [uploadfile.rhtml] 뷰 파일을 만든다.
대충 다음처럼..


<h1>File Upload</h1>
<%= start_form_tag ({:action => 'uploadFile'},
                        :multipart => true) %>
<p><label for="upload_file">Select File</label> :
<%= file_field 'upload', 'datafile' %></p>
<%= submit_tag "Upload" %>
<%= end_form_tag %>
 

여기까지가 설명한 모든 것들이다.
새로운 태그는 [file_field] 뿐이고, 이는 사용자의 컴퓨터에서 파일을 찾을 수 있는
버튼을 만들어준다.


multipart 파라미터를 참(true)로 설정하면, 파일을 binary file 형식으로 바로
인식한다.

여기서 중요한 것은 :action 에 메소드이름을 [uploadFile] 으로 업로드 버튼을 누르면
호출하기 위해서 지정한 것이다.

이는 다음화면처럼 보여준다.

[http://www.tutorialspoint.com/images/upload-file.gif]


업로드하면 app/public/data 디렉터리에 실제 파일명으로 저장되고 메시지가 보여진다.

NOTE: 디렉터리에 같은 파일명이 이미 존재하면 덮어쓸 것이다.

------------------------------------
대충 번역은 여기까지..
------------------------------------


Files uploaded from Internet Explorer:
Internet Explorer includes the entire path of a file in the filename sent, so the original_filename routine will return something like:


Files uploaded from Internet Explorer:
Internet Explorer includes the entire path of a file in the filename sent, so the original_filename routine will return something like:

C:\Documents and Files\user_name\Pictures\My File.jpg
 

instead of just:

My File.jpg
 

This is easily handled by File.basename, which strips out everything before the filename.

def sanitize_filename(file_name)
  # get only the filename, not the whole path (from IE)
  just_filename = File.basename(file_name)
  # replace all none alphanumeric, underscore or perioids
  # with underscore
  just_filename.sub(/[^\w\.\-]/,'_')
end
 

Deleting an existing File:
If you want to delete any existing file then its simple and need to write following code:

  def cleanup
    File.delete("#{RAILS_ROOT}/dirname/#{@filename}")
            if File.exist?("#{RAILS_ROOT}/dirname/#{@filename}")
  end
 

For a complete detail on File object, you need to go through Ruby Reference Manual.

[출처] http://guyv.tistory.com/201

2007. 10. 20. 12:55

MIME 타입 정리


컨텐트 형식으로 본 MIME Type

Type/sub-type Extension
application/envoy evy
application/fractals fif
application/futuresplash spl
application/hta hta
application/internet-property-stream acx
application/mac-binhex40 hqx
application/msword doc
application/msword dot
application/octet-stream *
application/octet-stream bin
application/octet-stream class
application/octet-stream dms
application/octet-stream exe
application/octet-stream lha
application/octet-stream lzh
application/oda oda
application/olescript axs
application/pdf pdf
application/pics-rules prf
application/pkcs10 p10
application/pkix-crl crl
application/postscript ai
application/postscript eps
application/postscript ps
application/rtf rtf
application/set-payment-initiation setpay
application/set-registration-initiation setreg
application/vnd.ms-excel xla
application/vnd.ms-excel xlc
application/vnd.ms-excel xlm
application/vnd.ms-excel xls
application/vnd.ms-excel xlt
application/vnd.ms-excel xlw
application/vnd.ms-outlook msg
application/vnd.ms-pkicertstore sst
application/vnd.ms-pkiseccat cat
application/vnd.ms-pkistl stl
application/vnd.ms-powerpoint pot
application/vnd.ms-powerpoint pps
application/vnd.ms-powerpoint ppt
application/vnd.ms-project mpp
application/vnd.ms-works wcm
application/vnd.ms-works wdb
application/vnd.ms-works wks
application/vnd.ms-works wps
application/winhlp hlp
application/x-bcpio bcpio
application/x-cdf cdf
application/x-compress z
application/x-compressed tgz
application/x-cpio cpio
application/x-csh csh
application/x-director dcr
application/x-director dir
application/x-director dxr
application/x-dvi dvi
application/x-gtar gtar
application/x-gzip gz
application/x-hdf hdf
application/x-internet-signup ins
application/x-internet-signup isp
application/x-iphone iii
application/x-javascript js
application/x-latex latex
application/x-msaccess mdb
application/x-mscardfile crd
application/x-msclip clp
application/x-msdownload dll
application/x-msmediaview m13
application/x-msmediaview m14
application/x-msmediaview mvb
application/x-msmetafile wmf
application/x-msmoney mny
application/x-mspublisher pub
application/x-msschedule scd
application/x-msterminal trm
application/x-mswrite wri
application/x-netcdf cdf
application/x-netcdf nc
application/x-perfmon pma
application/x-perfmon pmc
application/x-perfmon pml
application/x-perfmon pmr
application/x-perfmon pmw
application/x-pkcs12 p12
application/x-pkcs12 pfx
application/x-pkcs7-certificates p7b
application/x-pkcs7-certificates spc
application/x-pkcs7-certreqresp p7r
application/x-pkcs7-mime p7c
application/x-pkcs7-mime p7m
application/x-pkcs7-signature p7s
application/x-sh sh
application/x-shar shar
application/x-shockwave-flash swf
application/x-stuffit sit
application/x-sv4cpio sv4cpio
application/x-sv4crc sv4crc
application/x-tar tar
application/x-tcl tcl
application/x-tex tex
application/x-texinfo texi
application/x-texinfo texinfo
application/x-troff roff
application/x-troff t
application/x-troff tr
application/x-troff-man man
application/x-troff-me me
application/x-troff-ms ms
application/x-ustar ustar
application/x-wais-source src
application/x-x509-ca-cert cer
application/x-x509-ca-cert crt
application/x-x509-ca-cert der
application/ynd.ms-pkipko pko
application/zip zip
audio/basic au
audio/basic snd
audio/mid mid
audio/mid rmi
audio/mpeg mp3
audio/x-aiff aif
audio/x-aiff aifc
audio/x-aiff aiff
audio/x-mpegurl m3u
audio/x-pn-realaudio ra
audio/x-pn-realaudio ram
audio/x-wav wav
image/bmp bmp
image/cis-cod cod
image/gif gif
image/ief ief
image/jpeg jpe
image/jpeg jpeg
image/jpeg jpg
image/pipeg jfif
image/svg+xml svg
image/tiff tif
image/tiff tiff
image/x-cmu-raster ras
image/x-cmx cmx
image/x-icon ico
image/x-portable-anymap pnm
image/x-portable-bitmap pbm
image/x-portable-graymap pgm
image/x-portable-pixmap ppm
image/x-rgb rgb
image/x-xbitmap xbm
image/x-xpixmap xpm
image/x-xwindowdump xwd
message/rfc822 mht
message/rfc822 mhtml
message/rfc822 nws
text/css css
text/h323 323
text/html htm
text/html html
text/html stm
text/iuls uls
text/plain bas
text/plain c
text/plain h
text/plain txt
text/richtext rtx
text/scriptlet sct
text/tab-separated-values tsv
text/webviewhtml htt
text/x-component htc
text/x-setext etx
text/x-vcard vcf
video/mpeg mp2
video/mpeg mpa
video/mpeg mpe
video/mpeg mpeg
video/mpeg mpg
video/mpeg mpv2
video/quicktime mov
video/quicktime qt
video/x-la-asf lsf
video/x-la-asf lsx
video/x-ms-asf asf
video/x-ms-asf asr
video/x-ms-asf asx
video/x-msvideo avi
video/x-sgi-movie movie
x-world/x-vrml flr
x-world/x-vrml vrml
x-world/x-vrml wrl
x-world/x-vrml wrz
x-world/x-vrml xaf
x-world/x-vrml xof


파일 확장자로 본 Mime Types

Extension Type/sub-type
  application/octet-stream
323 text/h323
acx application/internet-property-stream
ai application/postscript
aif audio/x-aiff
aifc audio/x-aiff
aiff audio/x-aiff
asf video/x-ms-asf
asr video/x-ms-asf
asx video/x-ms-asf
au audio/basic
avi video/x-msvideo
axs application/olescript
bas text/plain
bcpio application/x-bcpio
bin application/octet-stream
bmp image/bmp
c text/plain
cat application/vnd.ms-pkiseccat
cdf application/x-cdf
cer application/x-x509-ca-cert
class application/octet-stream
clp application/x-msclip
cmx image/x-cmx
cod image/cis-cod
cpio application/x-cpio
crd application/x-mscardfile
crl application/pkix-crl
crt application/x-x509-ca-cert
csh application/x-csh
css text/css
dcr application/x-director
der application/x-x509-ca-cert
dir application/x-director
dll application/x-msdownload
dms application/octet-stream
doc application/msword
dot application/msword
dvi application/x-dvi
dxr application/x-director
eps application/postscript
etx text/x-setext
evy application/envoy
exe application/octet-stream
fif application/fractals
flr x-world/x-vrml
gif image/gif
gtar application/x-gtar
gz application/x-gzip
h text/plain
hdf application/x-hdf
hlp application/winhlp
hqx application/mac-binhex40
hta application/hta
htc text/x-component
htm text/html
html text/html
htt text/webviewhtml
ico image/x-icon
ief image/ief
iii application/x-iphone
ins application/x-internet-signup
isp application/x-internet-signup
jfif image/pipeg
jpe image/jpeg
jpeg image/jpeg
jpg image/jpeg
js application/x-javascript
latex application/x-latex
lha application/octet-stream
lsf video/x-la-asf
lsx video/x-la-asf
lzh application/octet-stream
m13 application/x-msmediaview
m14 application/x-msmediaview
m3u audio/x-mpegurl
man application/x-troff-man
mdb application/x-msaccess
me application/x-troff-me
mht message/rfc822
mhtml message/rfc822
mid audio/mid
mny application/x-msmoney
mov video/quicktime
movie video/x-sgi-movie
mp2 video/mpeg
mp3 audio/mpeg
mpa video/mpeg
mpe video/mpeg
mpeg video/mpeg
mpg video/mpeg
mpp application/vnd.ms-project
mpv2 video/mpeg
ms application/x-troff-ms
mvb application/x-msmediaview
nws message/rfc822
oda application/oda
p10 application/pkcs10
p12 application/x-pkcs12
p7b application/x-pkcs7-certificates
p7c application/x-pkcs7-mime
p7m application/x-pkcs7-mime
p7r application/x-pkcs7-certreqresp
p7s application/x-pkcs7-signature
pbm image/x-portable-bitmap
pdf application/pdf
pfx application/x-pkcs12
pgm image/x-portable-graymap
pko application/ynd.ms-pkipko
pma application/x-perfmon
pmc application/x-perfmon
pml application/x-perfmon
pmr application/x-perfmon
pmw application/x-perfmon
pnm image/x-portable-anymap
pot, application/vnd.ms-powerpoint
ppm image/x-portable-pixmap
pps application/vnd.ms-powerpoint
ppt application/vnd.ms-powerpoint
prf application/pics-rules
ps application/postscript
pub application/x-mspublisher
qt video/quicktime
ra audio/x-pn-realaudio
ram audio/x-pn-realaudio
ras image/x-cmu-raster
rgb image/x-rgb
rmi audio/mid
roff application/x-troff
rtf application/rtf
rtx text/richtext
scd application/x-msschedule
sct text/scriptlet
setpay application/set-payment-initiation
setreg application/set-registration-initiation
sh application/x-sh
shar application/x-shar
sit application/x-stuffit
snd audio/basic
spc application/x-pkcs7-certificates
spl application/futuresplash
src application/x-wais-source
sst application/vnd.ms-pkicertstore
stl application/vnd.ms-pkistl
stm text/html
svg image/svg+xml
sv4cpio application/x-sv4cpio
sv4crc application/x-sv4crc
swf application/x-shockwave-flash
t application/x-troff
tar application/x-tar
tcl application/x-tcl
tex application/x-tex
texi application/x-texinfo
texinfo application/x-texinfo
tgz application/x-compressed
tif image/tiff
tiff image/tiff
tr application/x-troff
trm application/x-msterminal
tsv text/tab-separated-values
txt text/plain
uls text/iuls
ustar application/x-ustar
vcf text/x-vcard
vrml x-world/x-vrml
wav audio/x-wav
wcm application/vnd.ms-works
wdb application/vnd.ms-works
wks application/vnd.ms-works
wmf application/x-msmetafile
wps application/vnd.ms-works
wri application/x-mswrite
wrl x-world/x-vrml
wrz x-world/x-vrml
xaf x-world/x-vrml
xbm image/x-xbitmap
xla application/vnd.ms-excel
xlc application/vnd.ms-excel
xlm application/vnd.ms-excel
xls application/vnd.ms-excel
xlt application/vnd.ms-excel
xlw application/vnd.ms-excel
xof x-world/x-vrml
xpm image/x-xpixmap
xwd image/x-xwindowdump
z application/x-compress
zip application/zip

출처 : PHPSCHOOL - 까칠한고민남
2007. 9. 14. 10:14

input에서 영문,숫자,특수문자만 입력받으려 할경우

style="ime-mode:disabled"
2007. 9. 14. 09:30

XML-RPC 관련문서 링크

2007. 6. 29. 15:56

정규표현식 기초

정규표현식의 기본 문법

 

정규표현식은 소프트웨어에 따라서 방식이나 지원 범위가 다를 있습니다.

 

^The”

"The" 시작하는 문자열

"of despair$"

"of despair" 끝나는 문자열

"^abc$"

"abc" 시작하고 "abc" 끝나는 문자열 ("abc" 라는 문자열도 해당됨)

"notice"

"notice" 들어 있는 문자열

 

"ab*"

a 다음에 b 0 이상 ("a", "ab", "abbb", )

"ab+"

a 다음에 b 1 이상 ("ab", "abbb", )

"ab?"

a 다음에 b 있거나 없거나 (ab 또는 a)

 

"ab{2}"

a 다음에 b 2 있는 문자열 ("abb")

"ab{2,}"

a 다음에 b 2 이상 ("abb", "abbbb", .)

"ab{3,5}"

a 다음에 b 3개에서 5 사이 ("abbb", "abbbb", 또는 "abbbbb")

 

'*', '+', '?' 각각 "{0,}", "{1,}", "{0,1}" 같습니다.

 

( ) 문자열을 묶음 처리할 사용

"a(bc)*"

a 다음에 “bc” 0 이상 (묶음 처리)

"a(bc){1,5}"

a 다음에 “bc” 1개에서 5 사이

 

"hi|hello"

"hi" "hello" 들어 있는 문자열

(응용) "(b|cd)ef"

"bef" 또는 "cdef"

(응용) "(a|b)*c"

a b 섞여서 여러번 나타나고 그뒤에 c 붙어있는 패턴

 

. ()

임의의 문자

ex) "^.{3}$"        3문자로만 되어 있는 문자열

 

[] 괄호 안에 있는 내용 임의의 문자

[] 안에서 첫문자로 ^ 쓰면 괄호 내용의 부정 괄호 안에 포함되지 않는 문자

"[ab]"

a 또는 b  ("a|b" 동일한 표현)

"[a-d]"

소문자 'a'에서 'd'까지 ("a|b|c|d"또는 "[abcd]" 동일)

(응용) "^[a-zA-Z]"

영문자로 시작하는 문자열

(응용) "[0-9]%"

% 문자 앞에 하나의 숫자가 붙어 있는 패턴

(응용) "%[^a-zA-Z]%"

% 문자 사이에 영문자가 없는 패턴

 

특수 문자 자체를 검색하기 사용하기

\^

^

 

\.

.

\[

[

 

\$

$

\(

(

 

\)

)

\|

|

 

\*

*

\+

+

 

\?

?

\{

{

 

\\

\

\n

줄넘김문자

 

\r

리턴문자

\w

알파벳과 _ (밑줄)

 

\W

알파벳과 _ 아닌

\s

공간

 

\S

공간이 아닌

\d

숫자

 

\D

숫자가 아닌

\b

단어와 단어 사이의 경계

 

\B

단어 사이의 경계가 아닌

\t

Tab문자

 

\xnn

16진수 nn 해당하는 문자

 

[ ] 안에서는 특수 문자가 모두 효력을 잃게 됩니다.

 

검색 + 치환 위한 하부식(부분식)

( ) 둘러싼 부분은 각각 하나의 덩어리로 취급해서, 검색시 ( ) 안에 해당되는 내용들을 변경할 내용에서 그대로 가져다 이용 있습니다. 검색된 각각의 ( )안에 해당되는 내용은 변경할 내용에서 $1, $2, .. 등으로 지정해서 있습니다.

예제) mp3파일 이름 바꾸기

검색 : (.*) - (.*)\.mp3   .* 길이에 상관없이 임의의 문자열, \.

치환 : $2 - $1.mp3     앞에서 검색한 ( )안에 해당되는 내용끼리 순서 바꾸기

ex) "제목 - 연주자.mp3"  Þ "연주자 - 제목.mp3"

앞에서 정의한 하부식을 다시 활용하기 (제가 잘못 이해한 것일 수도 있는데)

\n ( ) 하부식 중에서 n번째 하부식 가리킵니다.

예제) (.+)\1+

\1 되어 있으니까 첫번째 부분식 (.+) 가리킵니다. 내용을 해석하자면, 일단 (.+) 있으니까 이에 해당되는 내용을 찾고, \1+ 있으니까 첫번째 부분식 (.+) 똑같은 내용이 뒤에 1 이상 있는 문자열을 찾습니다.

예제) abab같은 문자열이 위에 해당되는데, 일단 (.+) 임의의 문자열 ab 찾고 뒤에 \1+ 첫번째 부분식을 다시 1 이상 있는 것을 찾으니까 뒤의 ab 이에 해당합니다.

 

변경자 검색 방식 변경

(?i)

대소문자 무시 (기본값)

(?-i)

대소문자 구분

(?g)

"greedy" 모드로 전환 (기본값)

(?-g)

"greedy" 모드 해제, 따라서 "+" "+?" 동일한 것으로 인식

 

2007. 6. 29. 15:56

정규표현식 기초

정규표현식의 기본 문법

 

정규표현식은 소프트웨어에 따라서 방식이나 지원 범위가 다를 있습니다.

 

^The”

"The" 시작하는 문자열

"of despair$"

"of despair" 끝나는 문자열

"^abc$"

"abc" 시작하고 "abc" 끝나는 문자열 ("abc" 라는 문자열도 해당됨)

"notice"

"notice" 들어 있는 문자열

 

"ab*"

a 다음에 b 0 이상 ("a", "ab", "abbb", )

"ab+"

a 다음에 b 1 이상 ("ab", "abbb", )

"ab?"

a 다음에 b 있거나 없거나 (ab 또는 a)

 

"ab{2}"

a 다음에 b 2 있는 문자열 ("abb")

"ab{2,}"

a 다음에 b 2 이상 ("abb", "abbbb", .)

"ab{3,5}"

a 다음에 b 3개에서 5 사이 ("abbb", "abbbb", 또는 "abbbbb")

 

'*', '+', '?' 각각 "{0,}", "{1,}", "{0,1}" 같습니다.

 

( ) 문자열을 묶음 처리할 사용

"a(bc)*"

a 다음에 “bc” 0 이상 (묶음 처리)

"a(bc){1,5}"

a 다음에 “bc” 1개에서 5 사이

 

"hi|hello"

"hi" "hello" 들어 있는 문자열

(응용) "(b|cd)ef"

"bef" 또는 "cdef"

(응용) "(a|b)*c"

a b 섞여서 여러번 나타나고 그뒤에 c 붙어있는 패턴

 

. ()

임의의 문자

ex) "^.{3}$"        3문자로만 되어 있는 문자열

 

[] 괄호 안에 있는 내용 임의의 문자

[] 안에서 첫문자로 ^ 쓰면 괄호 내용의 부정 괄호 안에 포함되지 않는 문자

"[ab]"

a 또는 b  ("a|b" 동일한 표현)

"[a-d]"

소문자 'a'에서 'd'까지 ("a|b|c|d"또는 "[abcd]" 동일)

(응용) "^[a-zA-Z]"

영문자로 시작하는 문자열

(응용) "[0-9]%"

% 문자 앞에 하나의 숫자가 붙어 있는 패턴

(응용) "%[^a-zA-Z]%"

% 문자 사이에 영문자가 없는 패턴

 

특수 문자 자체를 검색하기 사용하기

\^

^

 

\.

.

\[

[

 

\$

$

\(

(

 

\)

)

\|

|

 

\*

*

\+

+

 

\?

?

\{

{

 

\\

\

\n

줄넘김문자

 

\r

리턴문자

\w

알파벳과 _ (밑줄)

 

\W

알파벳과 _ 아닌

\s

공간

 

\S

공간이 아닌

\d

숫자

 

\D

숫자가 아닌

\b

단어와 단어 사이의 경계

 

\B

단어 사이의 경계가 아닌

\t

Tab문자

 

\xnn

16진수 nn 해당하는 문자

 

[ ] 안에서는 특수 문자가 모두 효력을 잃게 됩니다.

 

검색 + 치환 위한 하부식(부분식)

( ) 둘러싼 부분은 각각 하나의 덩어리로 취급해서, 검색시 ( ) 안에 해당되는 내용들을 변경할 내용에서 그대로 가져다 이용 있습니다. 검색된 각각의 ( )안에 해당되는 내용은 변경할 내용에서 $1, $2, .. 등으로 지정해서 있습니다.

예제) mp3파일 이름 바꾸기

검색 : (.*) - (.*)\.mp3   .* 길이에 상관없이 임의의 문자열, \.

치환 : $2 - $1.mp3     앞에서 검색한 ( )안에 해당되는 내용끼리 순서 바꾸기

ex) "제목 - 연주자.mp3"  Þ "연주자 - 제목.mp3"

앞에서 정의한 하부식을 다시 활용하기 (제가 잘못 이해한 것일 수도 있는데)

\n ( ) 하부식 중에서 n번째 하부식 가리킵니다.

예제) (.+)\1+

\1 되어 있으니까 첫번째 부분식 (.+) 가리킵니다. 내용을 해석하자면, 일단 (.+) 있으니까 이에 해당되는 내용을 찾고, \1+ 있으니까 첫번째 부분식 (.+) 똑같은 내용이 뒤에 1 이상 있는 문자열을 찾습니다.

예제) abab같은 문자열이 위에 해당되는데, 일단 (.+) 임의의 문자열 ab 찾고 뒤에 \1+ 첫번째 부분식을 다시 1 이상 있는 것을 찾으니까 뒤의 ab 이에 해당합니다.

 

변경자 검색 방식 변경

(?i)

대소문자 무시 (기본값)

(?-i)

대소문자 구분

(?g)

"greedy" 모드로 전환 (기본값)

(?-g)

"greedy" 모드 해제, 따라서 "+" "+?" 동일한 것으로 인식

 

2007. 6. 29. 15:56

정규표현식의 기본 문법

Basic Syntax of Regular Expressions (정규표현식의 기본 문법)

먼저 특수문자 '^'와 '$'를 살펴봅시다. 이 문자의 역할은 문자열의 시작과 끝을 의미합니다. 다음과 같은 해당 예를 들 수 있습니다.

"^The": "The"로 시작하는 문자열
"of despair$": "of despair"로 끝나는 문자열
"^abc$": "abc"로 시작하고 "abc"로 끝나는 문자열 ("abc" 라는 문자열도 해당됨)
"notice": "notice"가 들어 있는 문자열

마지막 예제에서 보듯이 이 두 개의 특수문자가 없는 패턴은 검사대상이 되는 문자열에 어떤 위치에서든지 들어 있음 의미합니다.

특수문자로는 '*', '+', '?'도 있습니다. 이 문자들은 어떤 문자의 반복에 관한 지정을 해주는 문자입니다. 각각 '0또는 그 이상', '1또는 그 이상', '0또는 1'을 의미합니다. 여기에 몇 가지 예제가 있습니다.

"ab*": a뒤에 0 이상의 b가 있는 문자열 ("a", "ab", "abbb", 등);
"ab+": 위와 동일 하지만 최소한 하나 이상의 b가 있어야 함 ("ab", "abbb", 등);
"ab?": b가 하나 있을 수도 있고 없을 수도 있음 (ab 또는 a)
"a?b+$": a가 있을 수도 있고 없을 수도 있으며 그뒤에 하나 이상의 b로 끝나는 문자열

{ }를 사용하면 반복되는 수를 영역으로 지정할 수 있습니다.

"ab{2}": a뒤에 2개의 b가 있는 문자열 ("abb");
"ab{2,}": a뒤에 최소한 2개 이상의 b가 있는 문자열 ("abb", "abbbb", 등.);
"ab{3,5}": a뒤에 3개에서 5개 사이의 b가 있는 문자열 ("abbb", "abbbb", 또는 "abbbbb").

{ }를 사용할 대는 반드시 첫 번째 숫자는 적어야 됨을 유의합니다. ((O) "{0,2}", (X) "{,2}"). 또한 '*', '+', '?'는 각각 "{0,}", "{1,}", "{0,1}"와 같습니다.

이제 ()를 사용해서 하나의 문자가 아닌 여러 문자를 지정하는 방법을 알아봅니다.

"a(bc)*": a 뒤에 "bc"가 0또는 그이상의 수만큼 있는 문자열
"a(bc){1,5}": a 뒤에 "bc."가 1에서 5번 들어 있는 문자열

또 다른 특수문자로는 OR 연산을 하는 '|'를 들 수 있습니다.

"hi|hello": "hi"나 "hello"가 들어 있는 문자열
"(b|cd)ef": "bef" 또는 "cdef"
"(a|b)*c": a와 b가 섞여서 여러번 나타나고 그뒤에 c가 붙어있는 패턴

'.' (period)는 어떤 한 문자를 의미합니다.

"a.[0-9]": a뒤에 한 문자와 숫자가 붙어 있는 패턴
"^.{3}$": 3문자로만 되어 있는 문자열

[]표현은 문자열의 해당 위치에 사용될 수 있는 문자를 표현하는데 사용합니다.

"[ab]": a또는 b ("a|b"와 동일한 표현);
"[a-d]": 소문자 'a'에서 'd'까지 ("a|b|c|d"또는 "[abcd]"와 동일);
"^[a-zA-Z]": 영문자로 시작하는 문자열
"[0-9]%": % 문자 앞에 하나의 문자가 붙어 있는 패턴
",[a-zA-Z0-9]$": 영문자, 숫자로 끝나는 문자열 패턴

[]에서 '^'를 표현의 가장 처음에 사용하면 나타나서는 안 되는 문자를 지정할 수 있습니다. (예> "%[^a-zA-Z]%" 두 % 사이에 영문자가 없는 패턴)

"^.[$()|*+?{"같은 특수 문자는 백슬레쉬('')를 사용해서 escape될 수 있습니다( 역자 주 : escape 이란 다른 말로 literal로 탈출한다라고 할 수 있습니다 즉 특수문자로 인식되지 않고 일반 문자로 인식되게 합니다). 사용하는 관점에서 보면 백슬레쉬도 PHP3의 문자열에서 escape되어야 하기 때문에 예를 들어 "($|?[0-9]+"같은 정규표현식은 ereg("($|?[0-9]+", $str) 와 같이 사용됩니다 (이 표현식은 무얼 검사하는 걸까요? ^^;(이건 역자가 한 말이 아닙니다))

하지만 []안에서는 특수문자가 모두 효력을 읽게 되기 때문에 이 법칙을 벗어남을 기억하세요 []안에서는 백슬레쉬를 포함한 모든 특수문자들이 그 힘을 읽습니다 (예> "[*+?{}.]"는 말그대로 '*', '', '+', '?', '{', '}', '.' 문자를 의미합니다. 그리고 regex man 페이지에 나오듯이 ']'문자 자체를 포함하려면 문자들 리스트의 첫 번째에 위치시킵니다('^'가 있으면 '^'뒤에). '-'를 포함하려면 첫 번째 또는 마지막 문자로 지정하고 '-'문자가 영역의 경계 (예> a에서 -까지)일 경우 영역지정 문자의 두 번째 경계로 지정([a--])합니다.

완벽한 설명을 하려면 대조 순서(collating sequences), 문자 클래스(character classes), 동일 클래스(equivalence classes)에 대해서도 다루어야 하지만 이 글에서는 별 상관관계가 없기 때문에 regex man 페이지를 참고하도록 합니다.

-Validating Money Strings (금액 문자열 검사하기)

ok 이제 우리는 여기서 배운 것을 뭔가 실질적인 것에 적용 시켜봅시다. 사용자가 입력한 금액을 검사하는 정규표현식에 대해 알아봅니다. 금액은 "10000.00" 와 "10,000.00", 와, 센트 없이, "10000" 와 "10,000" 이렇게 4가지 방법으로 사용됩니다. (역자주 : 달러와 센트 군요 &#34625;,.&#34625;)

다음 정규표현식을 기초로 시작해 봅시다.

^[1-9][0-9]*$

이 정규표현식은 0으로 시작하지 않는 어떠한 수인지를 검사합니다. 하지만 "0"도 통과되지 못합니다. 그래서 다음과 같이 수정합니다.

^(0|[1-9][0-9]*)$

말로 표현하면 "0 이거나 0으로 시작하지 않는 수"입니다. 이제 수 앞에 -부호도 사용할 수 있게 수정해 봅니다.

^(0|-?[1-9][0-9]*)$

이 뜻은 "0 이거나 -이 있을 수 있는 수이고 이 수는 0으로 시작하지 않는다"입니다. 이제 좀 느슨하게 하고 유저가 0으로 시작하는 수도 입력할 수 있도록 해봅니다. 금액에 필요없는 -부호도 없애버립니다. 그리고 선택사항인 소수점 부분 패턴도 넣어서 다음 정규표현식이 나옵니다.

^[0-9]+(.[0-9]+)?$

하이라이트된 부분은 소수점(.)이 항상 최소한 하나이상의 수와 붙어 있어야 함을 의미합니다. 그러므로 예를 들면 "10."은 통과되지 못하고 "10" 과 "10.2"는 통과합니다.

^[0-9]+(.[0-9]{2})?$

이제 소수점 뒤에 반드시 2개의 수가 붙어 있어야 합니다. 이게 너무 심하다 싶으면 다음과 같이 해서

^[0-9]+(.[0-9]{1,2})?$

소수점 뒤에 하나의 숫자만 올 수도 있게 합니다. 이제 1000단위를 구분하는 ','를 표현해 봅니다.

^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$

"1~3개의 숫자와 그 뒤에 ','와 3개의 숫자로 이루어진 부분이 0개 또는 그 이상이 붙어 있는 패턴". 쉽죠? 이제 ','도 선택사항(옵션:option)으로 만들어 봅니다.

^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$

이게 전부입니다. 여기서 '+'를 '*'로 바꾸면 빈 문자열도 통과되는 패턴이 됩니다. 함수호출할 때 백슬래쉬 문자 escape하는 것 (역자 : /를 //로) 잊지 마세요. 일단 문자열이 검사되어 지면 str_replace("," , "" , $money) 함수로 ','를 없애버리고 double로 형 변환을 해서 산술연산에도 사용할 수 있게 합니다.

- Validating E-mail Addresses (E-mail 주소 검사하기)

이제 e-mail 주소를 살펴봅시다. e-mail주소는 3부분으로 구성됩니다. : user 명(@왼쪽편에 있는 모든 것), '@', 그리고 서버명(나머지 부분들) user명은 대문자 또는 소문자와 숫자, '.' '-', '_'로 구성됩니다. '_'를 제외하면 서버명도 마찬가지입니다. user 명은 .으로 시작하거나 끝나지 않습니다. domain명도 마찬가지입니다. 또한 .이 연속으로 있을 수도 없고 . 사이에는 최소한 하나 이상의 문자가 있어야 합니다. 이제 user명 부분을 검사하는 정규표현식을 만들어 봅시다.

^[_a-zA-Z0-9-]+$

이 정규표현식은 아직 .을 지원하지 않습니다. 다음과 같이 수정합니다.

^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$

말로 하면 "최소한 하나의 유효한 문자(valid character)와 그 뒤에 .과 유효문자들로 구성된 부분이 0또는 그 이상이 있는 패턴"입니다.

좀 간단하게 하기 위해 이 정규표현식을 ereg()대신에 eregi()함수에 사용합니다. eregi()함수는 대소문자를 구분하지 않기 때문에 "a-z"와 "A-Z"같이 두 개의 영역을 지정하지 않아도 되는 이점이 있습니다.(둘 중 어떤 것이라도 상관없음)

^[_a-z0-9-]+(.[_a-z0-9-]+)*$

서버명의 경우 '_'만 제외하고는 동일합니다.
^[a-z0-9-]+(.[a-z0-9-]+)*$

이제 '@'를 중심으로 서로 붙여서 다음과 같이 만들어 냅니다.

^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$

- 기타 사용

Extracting Parts of a String (문자열의 일부분 잘라내기)

ereg()와 eregi()함수는 문자열에서 패턴에 해당되는 부분을 잘라내는 기능이 있습니다. (메뉴얼 참고) 예를 들면 path/URL 문자열에서 파일명을 잘라내고 싶은 경우 다음과 같은 코드가 필요할 것입니다.

ereg("([^/]*)$", $pathOrUrl, $regs);
echo $regs[1];

Advanced Replacing (치환의 발전된 형태)

ereg_replace() 와 eregi_replace()는 아주 유용한 함수입니다. 문자열에 있는 모든 문자를 ','로 구분한다고 가정해 봅시다. 다음과 같이 할 수 있습니다. (역자 : trim()함수는 문자열의 앞과 뒤에 있는 공백문자를 모두 제거하는 함수)

ereg_replace("[ nrt]+", ",", trim($str));

2007. 6. 29. 15:53

Ascii 특수문자

사용자 삽입 이미지