2013년 11월 4일 월요일

Command Tricks

COMMAND(Batch) tricks

Find all file(directory) including sub dir.

dir "dirname" /A:D /S /B

Find all sub dir + remove dir

FOR /f "tokens=*" %a in ('dir *.delete /A:D /B /S') DO RMDIR /S /Q %a

Find *.cpp and *.h

dir /s /b *.cpp;*.h

find trace*.cpp

dir /s /b trace*.cpp

find text “Trace” in *.cpp + *.h

dir /s /b *.cpp;*.h | find "Trace"

Written with StackEdit.

dumpbin - vs의 nm같은 tool

덤프빈 다운로드 / 

DumpBin execution version
DumpBin.zip download

사용법

아래처럼 옵션 다음에 실행파일의 path 를 적어주면 된다.
dumpbin /option exe_path
c:\>dumpbin /disasem c:\windows\notepad.exe

자세한 설명은 아래를 참고하자.

/EXPORTS

c:\>dumpbin /exports c:\windows\system32/ntdll.dll

이렇게 하면, export 하고 있는 함수의 리스트를 볼 수 있다.

Referenece

  1. http://originaldll.com/
  2. http://www.nodevice.com/dll/MSDIS110_DLL/item10670.html

2013년 7월 4일 목요일

create thread mfc

create thread in mfc


1. class member function thread

header

private: 
static DWORD TestThread(LPVOID lpParameter);

usage cpp

m_hTestThread = ::CreateThread(NULL,0, (LPTHREAD_START_ROUTINE) MpWatcherWnd::TestThread, (void*)(this), 0, &dwTestThread);

definition cpp


DWORD TestClass::TestThread(LPVOID lpParameter)
{
TestClass* pTest = (TestClass*)lpParameter;
if (pTest)
{
// work
}
else
{
// error!
}
return 0;
}


2. global thread


2013년 7월 3일 수요일

NSIS Installer

basic help 


http://nsis.sourceforge.net/Main_Page
http://www.kippler.com/doc/nsis/

tutorial

http://nsis.sourceforge.net/Category:Tutorials

sample

http://nsis.sourceforge.net/Category:Code_Examples
http://nsis.sourceforge.net/A_simple_installer_with_start_menu_shortcut_and_uninstaller

download

http://nsis.sourceforge.net/Download


useful links

no?

basic usage

sample.nsi
; sample.nsi
;
; This script is based on example1.nsi, but it remember the directory, 
; has uninstall support and (optionally) installs start menu shortcuts.
;
; It will install Sample.nsi into a directory that the user selects,

;--------------------------------

; define includes
!include "WinMessages.nsh"
!include "FileFunc.nsh"
!include "LogicLib.nsh"

; The version of the installer
!define VERSION "1.2.1"

; The name of the installer
Name "Sample ${VERSION}"

; The file to write
OutFile "Sample.${VERSION}.exe"

; The default installation directory
InstallDir "$PROGRAMFILES\Sample"

; define reserved files
ReserveFile "Sample.exe"
ReserveFile "Sample.dll"
ReserveFile "Sample.sys"
ReserveFile "Sample.txt"


; Registry key to check for directory (so if you install again, it will 
; overwrite the old one automatically)
InstallDirRegKey HKLM "Software\Sample" "C:\Program Files\Sample\"

; Request application privileges for Windows Vista
RequestExecutionLevel admin

; Define Interval variable
Var /GLOBAL DefaultInterval

;--------------------------------

; Pages

; describe license
PageEx license
   LicenseData license.txt
PageExEnd
Page components
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles

;--------------------------------
; Functions

Function .onInit

FunctionEnd

Function .onInstSuccess

FunctionEnd

Function un.onInit

FunctionEnd

Function un.onUninstSuccess

FunctionEnd


;--------------------------------
; The stuff to install
Section "Sample ${VERSION}"
SectionIn RO

; Set output path to the installation directory.
SetOutPath $INSTDIR

; Write the installation path into the registry
WriteRegStr HKLM SOFTWARE\Sample "Install_Dir" "$INSTDIR"
 
; Write the uninstall keys for Windows
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Sample" "DisplayName" "Sample"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Sample" "Publisher" "Sample Co., Ltd."
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Sample" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteUninstaller "uninstall.exe"

; Copy Sample.sys
SetOutPath "C:\WINDOWS\system32\drivers\"
File Sample.sys

; Copy Sample files
;SetOutPath "C:\Program Files\Sample\"
SetOutPath $INSTDIR
File Sample.exe
File Sample.dll
File Sample.txt
SectionEnd

; Optional section (can be disabled by the user)
Section "Start Menu Shortcuts"
CreateDirectory "$SMPROGRAMS\Sample"
CreateShortCut "$SMPROGRAMS\Sample\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
SectionEnd

;--------------------------------

; Uninstaller

Section "Uninstall"
; Stop and remove Services
ExecWait '"Cmd.exe" /c net stop Sample'
ExecWait '"Cmd.exe" /c $INSTDIR\Sample.exe -remove'
; Remove registry keys
DeleteRegKey HKLM "SYSTEM\CurrentControlSet\Services\Sample"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Sample"
DeleteRegKey HKLM "SYSTEM\CurrentControlSet\Services\Sample"
DeleteRegKey HKLM "Software\Sample"

; Remove files and uninstaller
Delete "$INSTDIR\Sample.nsi"
Delete "$INSTDIR\uninstall.exe"
Delete "$INSTDIR\*.*"
Delete "C:\windows\system32\drivers\Sample.sys"

; Remove shortcuts, if any
Delete "$SMPROGRAMS\Sample\*.*"

; Remove directories used
RMDir "$SMPROGRAMS\Sample"
RMDir "$INSTDIR"
SectionEnd



2013년 6월 24일 월요일

SetForegoundWindow without taskbar flashing(blinking, flickering)


ㅡ.ㅡ ::SetForegoundWindow() 가 호출은 정상으로 되나 동작을 이상하게 할때가 있음.

특히 #Windows7 일때.

그럴때 써볼만한 팁들 모음

1. How to bring window to top with SetForegroundWindow()

2. SetForegroundWindow Win32-API not always works on Windows-

void SetForegroundWindowInternal(HWND hWnd)
{
 if(!::IsWindow(hWnd)) return;

 //relation time of SetForegroundWindow lock
 DWORD lockTimeOut = 0;
 HWND  hCurrWnd = ::GetForegroundWindow();
 DWORD dwThisTID = ::GetCurrentThreadId(),
  dwCurrTID = ::GetWindowThreadProcessId(hCurrWnd,0);

 //we need to bypass some limitations from Microsoft :)
 if(dwThisTID != dwCurrTID)
 {
  ::AttachThreadInput(dwThisTID, dwCurrTID, TRUE);

  ::SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT,0,&lockTimeOut,0);
  ::SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,0,SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);

  ::AllowSetForegroundWindow(ASFW_ANY);
 }

 ::SetForegroundWindow(hWnd);

 if(dwThisTID != dwCurrTID)
 {
  ::SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,(PVOID)lockTimeOut,SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);
  ::AttachThreadInput(dwThisTID, dwCurrTID, FALSE);
 }
}
















2012년 8월 22일 수요일

mfc path 관련 함수들

MFC의 path... 관련 함수들 정리

출저 : http://kkamagui.springnote.com/pages/790020
함 수 명
인  자
결  과
PathAddBackslash
c:\path1
c:\path1\
PathBuildRoot
0
A:\
PathCanonicalize
c:\path1\..\.\path1
c:\path1
PathCompactPath
c:\path1\path2\path3\file.txt
c:\path1\...\file.txt
PathFileExists
c:\path1\file.txt
파일의존재유무[T/F]
PathFindFileName
c:\path1\path2\file.txt
file.txt
PathIsDirectory
c:\path1\path2
디렉토리유무[T/F]
PathIsfileSpec
file.txt
순수파일이름인지[T/F]
PathMakePretty
C:\PATH1\FILE.TXT
C:\path1\file.txt
PathIsNetworkPath
\\YHKim\path1\file.txt
네트워크경로인지[T/F]
PathIsRoot
c:\
루트경로인지유무[T/F]
PathIsSystemFolder
c:\windows\System32
시스템폴더인지유무[T/F]
PathRemoveBackslash
c:\path1\path2\
c:\path1\path2
PathRemoveBlanks
“ c:\path1\path2 “
“c:\path1\path2”
PathRemoveExtension
c:\path1\path2\file.txt
c:\path1\path2\file
PathRemoveFileSpec
c:\path1\path2\file.txt
c:\path1\path2
PathRenameExtension
c:\path1\path2\file.txt
c:\path1\path2\file.changed
PathStripPath
c:\path1\path2\file.txt
file.txt


관련된 참고할 만한 MSDN Resource

Shell Function들 중 일부 함수들
http://msdn2.microsoft.com/en-us/library/bb776426(VS.85).aspx
Shell Lightweight Utility Functions중 Path와 관련된 함수들
http://msdn2.microsoft.com/en-us/library/bb773559(VS.85).aspx
User Profiles Function중 Path를 얻어 오는데 관련된 함수들
http://msdn2.microsoft.com/en-us/library/aa375109(VS.85).aspx
Q) 클라이언트 컴퓨터에 설치된 firefox의 경로를 찾고 싶은데 어떻게 하지? Firefox가 써 놓은 레지스터리값를 뒤져볼까? firefox의 기본 설치 경로에 exe 파일을 createfile해서 판단할까?
Ans) SearchPath를 이용하셔서 FullPath를 얻으시고, 얻은 FullPath를 PathFileExists로 검증하시면 됩니다.

ps. Path가 등록이된 파일을 찾고 싶다면, SearchPath를 이용하면 FullPath가 넘어 온다.

regular expression examples

regular expression examples


// 줄 처음
^

// 줄 끝
$

// 한줄 선택
^.*$

// 줄 처음부터 검색
^.*@KN

test@gmail.com
test test oooo
pwetioub#%$!@KN
http://test.com
qqeeRRNN



// 중간부터 검색
ti.*#

test@gmail.com
test test oooo
pwetioub#%$!@KN
http://test.com
qqeeRRNN



// 이메일 체크
var re = /^[-!#$%&'*+./0-9=?A-Z^_a-z{|}~]+@[-!#$%&'*+/0-9=?A-Z^_a-z{|}~]+.[-!#$%&'*+./0-9=?A-Z^_a-z{|}~]+$/;

// 비밀번호,아이디체크 영문,숫자만허용, 4~10자리
var re = /^[A-Za-z0-9]{4,10}$/

// 홈페이지 체크
var re = new RegExp("(http|https|ftp|telnet|news|irc)://([-/.a-zA-Z0-9_~#%$?&=:200-377()]+)","gi")


Greedy = .*
Lazy = .*?


///////// 정규표현식

문자지정 . 사용예제
. 은 아무 문자나 1개를 가리킨다.
하지만 "줄바꿈 문자"는 제외된다.
====================================
Find h.t
Replace 123
Source hat halt hit heat hot
Result 123 halt 123 heat 123
====================================
Find h..t
Replace 1234
Source hat halt hit heat hot
Result hat 1234 hit 1234 hot
====================================


문자지정 [ ] 사용예제
[ ] 은 그 안에 있는 문자중 아무것 1개를 가리킨다.
[abc] a,b,c 중 아무것이나 1개
[1234] 1,2,3,4 중 아무것이나 1개
[a-z] 알파벳 소문자 중 아무것이나 1개
[A-Z] 알파벳 대문자 중 아무것이나 1개
[0-9] 숫자 중 아무것이나 1개
[a-zA-Z] 알파벳 소문자나 대문자 중 아무것이나 1개
[a-zA-Z0-9_] 알파벳, 숫자, 밑줄문자 중 아무것이나 1개
====================================
Find h[aiu]t
Replace 123
Source hat het hit hot hut
Result 123 het 123 hot 123
====================================


문자지정 [^ ] 사용예제
[^ ] 은 그 안에 있는 문자를 제외한 문자중 아무것 1개를 가리킨다.
[^abc] a,b,c 이외의 문자 중 아무것이나 1개
[^1234] 1,2,3,4 이외의 문자 중 아무것이나 1개
[^a-z] 알파벳 소문자 이외의 문자 중 아무것이나 1개
[^A-Z] 알파벳 대문자 이외의 문자 중 아무것이나 1개
[^0-9] 숫자 이외의 문자 중 아무것이나 1개
[^a-zA-Z] 알파벳 소문자나 대문자 이외의 문자 중 아무것이나 1개
[^a-zA-Z0-9_]알파벳, 숫자, 밑줄문자 이외의 문자 중 아무것이나 1개
====================================
Find h[^aiu]t
Replace 123
Source hat het hit hot hut
Result hat 123 hit 123 hut
====================================


개수지정 * 사용예제
* 은 바로 앞에 있는 문자가 0개 또는 그 이상 있는 것을 가리킨다.
{0,}과 같은 의미이다.
====================================
Find ha*t
Replace 123
Source ht hit hat hot haat hut haaaaat
Result 123 hit 123 hot 123 hut 123
====================================


개수지정 + 사용예제
+ 은 바로 앞에 있는 문자가 1개 또는 그 이상 있는 것을 가리킨다.
{1,}과 같은 의미이다.
====================================
Find ha+t
Replace 123
Source ht hit hat hot haat hut haaaaat
Result ht hit 123 hot 123 hut 123
====================================


개수지정 ? 사용예제
? 은 바로 앞에 있는 문자가 0개 또는 1개 있는 것을 가리킨다.
{0,1}과 같은 의미이다.
====================================
Find ha?t
Replace 123
Source ht hit hat hot haat hut haaaaat
Result 123 hit 123 hot haat hut haaaaat
====================================


개수지정 {n} 사용예제
{n} 은 바로 앞에 있는 문자가 n개 있는 것을 가리킨다.
====================================
Find ha{2}t
Replace 123
Source ht hit hat hot haat hut haaaaat
Result ht hit hat hot 123 hut haaaat
====================================


개수지정 {n,} 사용예제
{n,} 은 바로 앞에 있는 문자가 n개 이상 있는 것을 가리킨다.
====================================
Find ha{2,}t
Replace 123
Source ht hit hat hot haat hut haaaaat
Result ht hit hat hot 123 hut 123
====================================


개수지정 {n,m} 사용예제
{n,m} 은 바로 앞에 있는 문자가 n개 이상, m개 이하 있는 것을 가리킨다.
====================================
Find ha{2,4}t
Replace 123
Source ht hat haat haaat haaaat haaaaat
Result ht hat 123 123 123 haaaaat
====================================


개수지정 Greedy방식과 Lazy방식
문자 개수를 지정하는 방법은 크게 Greedy방식과 Lazy방식으로 나뉘어진다.
Lazy방식은 Non-Greedy 방식이라고 한다.
Greedy 방식은 욕심이 많아서 가능한 최대의 것을 선택한다.
Lazy방식은 게을러서 가능한 최소의 것을 선택한다.
Greedy 방식뒤에 ?을 붙이면 Lazy방식이 된다.
==================
= Greedy = Lazy =
==================
* *?
+ +?
? ??
{n} {n}?
{n,} {n,}?
{n,m} {n,m}?
==================
* 은 Greedy 방식으로, 바로 앞에 있는 문자가 0개 또는 그 이상 있는것중, 가능한 최대의 것을 가리킨다.
*? 은 Lazy 방식으로, 바로 앞에 있는 문자가 0개 또는 그 이상 있는 것 중, 가능한 최소의 것을 가리킨다.
+ 은 Greedy 방식으로, 바로 앞에 있는 문자가 1개 또는 그 이상 있는 것 중, 가능한 최대의 것을 가리킨다.
+? 은 Lazy 방식으로, 바로 앞에 있는 문자가 1개 또는 그 이상 있는 것 중, 가능한 최소의 것을 가리킨다.
? 은 Greedy 방식으로, 바로 앞에 있는 문자가 0개 또는 1개 있는 것 중, 가능한 최대의 것을 가리킨다.
?? 은 Greedy 방식으로, 바로 앞에 있는 문자가 0개 또는 1개 있는 것 중, 가능한 최소의 것을 가리킨다.
{n} 은 Greedy 방식으로, 바로 앞에 있는 문자가 n개 있는 것을 가리킨다.
{n}? 은 Lazy 방식으로, 바로 앞에 있는 문자가 n개 있는 것을 가리킨다.
{n} 과 {n}? 은 동일하다.
{n,} 은 Greedy 방식으로, 바로 앞에 있는 문자가 n개 이상 있는 것 중, 가능한 최대의 것을 가리킨다.
{n,}? 은 Lazy 방식으로, 바로 앞에 있는 문자가 n개 이상 있는 것 중, 가능한 최소의 것을 가리킨다.
{n,m} 은 Greedy 방식으로, 바로 앞에 있는 문자가 n개 이상, m개 이하 있는 것 중, 가능한 최대의 것을 가리킨다.
{n,m}? 은 Lazy 방식으로, 바로 앞에 있는 문자가 n개 이상, m개 이하 있는 것 중, 가능한 최소의 것을 가리킨다.

.* 과 .*? 은 일반적으로 많이 쓰이는 정규표현식 패턴이다.
. 은 "줄바꿈문자"를 제외한 아무 문자나 1개를 가리킨다.
* 은 Greedy 방식으로, 바로 앞에 있는 문자가 0개 또는 그 이상 있는 것 중, 가능한 최대의 것을 가리킨다.
*? 은 Lazy방식으로, 바로 앞에 있는 문자가 0개 또는 그 이상 있는 것 중, 가능한 최소의 것을 가리킨다.
.* 은 Greedy 방식으로, "줄바꿈문자"를 제외한 아무 문자나 0개 또는 그 이상 있는 것 중, 가능한 최대의 것을 가리킨다.
.*? 은 Lazy방식으로, "줄바꿈문자"를 제외한 아무 문자나 0개 또는 그 이상 있는 것 중, 가능한 최소의 것을 가리킨다.
====================================
Find <.*>
Replace 123
Source Regex Greedy Style
Regex Lazy Style
Result Regex 123 Style
Regex 123 Style
====================================
<.*> 과 일치하는것 : <로 시작하고, 중간에 아무 문자나 0개 이상 들어있고, >로 끝나는 것 중, 가능한 최대의것
Greedy, Lazy

====================================
Find <.*?>
Replace 123
Source Regex Greedy Style
Regex Lazy Style
Result Regex 123Greedy123 Style
Regex 123Lazy123 Style
====================================
<.*?> 과 일치하는것 : <로 시작하고, 중간에 아무 문자나 0개 이상 들어있고, >로 끝나는 것 중, 가능한 최소의것
, , ,

.+ 과 .+? 도 일반적으로 많이 쓰이는 정규식 패턴이다.
. 은 "줄바꿈문자"를 제외한 아무 문자나 1개를 가르킨다.
+ 은 Greedy 방식으로, 바로 앞에 있는 문자가 1개 또는 그 이상 있는 것 중, 가능한 최대의 것을 가리킨다.
+? 은 Lazy 방식으로, 바로 앞에 있는 문자가 1개 또는 그 이상 있는 것 중, 가능한 최소의 것을 가리킨다.
.+ 은 Greedy 방식으로, "줄바꿈문자"를 제외한 아무 문자나 1개 또는 그 이상 있는 것 중, 가능한 최대의 것을 가리킨다.
.+? 은 Lazy방식으로, "줄바꿈문자"를 제외한 아무 문자나 1개 또는 그 이상 있는 것 중, 가능한 최소의 것을 가리킨다.



위치지정 ^ 사용예제
^ 은 줄의 제일 처음을 가리킨다.
====================================
Find ^h.t
Replace 123
Source hat hit hot
Result 123 hit hot
====================================


위치지정 $ 사용예제
$ 은 줄의 제일 마지막을 가리킨다.
====================================
Find h.t$
Replace 123
Source hat hit hot
Result hat hit 123
====================================


한 줄 전체 선택 ^.*$ 사용예제
^.*$ 은 줄 처음과 끝사이에 아무 문자나 0개 이상 있는것을 의미하므로, 결과적으로 한 줄 전체를 가리킨다.
아무것도 없는 빈 줄도 해당된다.
====================================
Find ^.*$
Replace 123
Source Regular Expressions
Greedy Style
Lazy Style
Result 123
123
123
====================================


Group 지정 ( ) 사용 예제
( ) 은 Group을 지정할때 사용된다.
Group은 개수 지정 패턴과 함께 사용될때, 한개의 문자 처럼 취급된다.
====================================
Find ba(na)*
Replace 123
Source ba na bana banana nana bananana
Result 123 na 123 123 nana 123
====================================
====================================
Find ba(na)+
Replace 123
Source ba na bana banana nana bananana
Result ba na 123 123 nana 123
====================================


Group Referencing $1 사용예제
Group으로 지정된 내용을 Find Pattern 이나 Replace Pattern 안에서 다시 사용하는 것을 Referencing이라고 한다.
$1, $2, $3 ... 이런 스타일의 요소들은 Group으로 지정된 내용을 Replace Pattern 안에서 Referencing할 때 사용된다.
====================================
Find h(.*?)t
Replace $1
Source hat halt hit heat hot
Result a al i ea o
====================================
Replace Pattern에서 $1은 (.*?) Group에 해당하는 것을 가리킨다.


Group Referencing \1 사용예제
Group으로 지정된 내용을 Find Pattern 이나 Replace Pattern 안에서 다시 사용하는 것을 Referencing이라고 한다.
\1, \2, \3 ... 이런 스타일의 요소들은 Group으로 지정된 내용을 Replace Pattern 안에서 Referencing할 때 사용된다.
====================================
Find (h.t)\1
Replace 123
Source hathat hitbit hothot hutcut
Result 123 hitbit 123 hutcut
====================================
Find Pattern에서 \1은 (h.t) Group에 해당하는 것을 가리킨다.
결과적으로 h로 시작하고, 중간에 아무 문자나 하나 들어가고, t로 끝나는 단어가 두번 반복되는 것이 123으로 바뀐다.


OR 선택 지정 ( | ) 사용 예제
( | ) 은 | 으로 나뉘어진 여러개의 Pattern중에서 하나와 일치하는 것을 가리킨다.
====================================
Find (eg|sa|be)g
Replace 123
Source egg eng sag sig beg bag
Result 123 eng 123 sig 123 bag
====================================


주요 Escape 문자 목록
\u0020 16진수 Unicode 문자, 항상 4자리로 사용
\x20 16진수 ASCII 문자, 항상 2자리로 사용
\t 탭 문자, Tab, \u0009
\r 줄 바꿈 문자, Carriage Return, \u000D
\n 줄 바꿈 문자, Line Feed, \u000A
\s 공백 문자, White-Space Character, \t \r \n 스페이스 포함
\S \s 이외의 문자
\d 숫자, [0-9] 과 같은 의미
\D \d 이외의 문자, [^0-9] 과 같은 의미
\w Word Character, [a-zA-Z0-9_] 과 한글 일본어 중국어 등의 유니코드 문자 포함
\W \w 이외의 문자
\b [ ] 안에서 사용될 때는 백스페이스 문자, Backspace, \u0008
[ ] 밖에서 사용될 때는 \w 과 \W 사이의 경계, Word Boundary
Replace Pattern에서 사용될 때는 항상 백스페이스 문자
\\ \ 문자 자체를 가리킬 때 사용
비슷한 사용법 \. \* \+ \? \^ \$ \( \) \{ \} \[ \]


Word Boundary \b 사용 예제
\b는 \w와 \W 의 경계를 가리킨다.
\b는 문자 자체를 가리키는 것이 아니다. ( ^이나 $이 문자 자체를 가리키는 것이 아닌것과 동일하다.)
주로 단어가 시작하는 것을 가리키거나, 단어가 끝나는 것을 가리킬때 사용된다.
====================================
Find \b3
Replace x
Source 333 333 333
Result x33 x33 x33
====================================
\b3 과 일치하는것 : 단어의 제일 앞에 있는3
====================================
Find 3\b
Replace x
Source 333 333 333
Result 33x 33x 33x
====================================
3\b 과 일치하는것 : 단어의 제일 뒤에 있는3


줄 바꿈 문자 \r\n 사용예제
.NET기반의 정규식 도구는 많이 있지만, Replace Pattern에서 \r 나 \n 같은 Escape Squence 문자를 정확하게 다루는 도구는 eLiner가 거의 유일하다.
다른 .NET기반의 정규식 도구들은 대부분 Find Pattern에서는 Escape Sequence 문자를 잘 다루지만, Replace Pattern에서는 Escape Sequence 문자를 제대로 다루지 못한다.
====================================
Find

Replace \r\n
Source spring
summer
fall
winter
Result spring
summer
fall
winter
====================================