2016년 2월 23일 화요일
PHPUnit
PHPUnit이란, 단위 테스트를 할 수 있는 PHP용 Unit test 프레임워크이다.
Laravel framework도 PHPUnit으로 단위 테스트를 할 수 있게 구현되어 있다.
PHPUnit 설치방법
먼저, php가 설치되어 있는 경로를 찾는다.
필자는, C:\xampp\php이다.
그 다음, https://phpunit.de/manual/current/en/installation.html 접속한 후
phpunit.phar을 다운 받는다.
다운 받은 파일을 C:\xampp\php 로 이동시킨다.
마지막으로 배치 파일만 만들면 된다.
배치 파일이란, 확장자가 .bat 또는 .cmd를 가진 텍스트 파일로써
문법, 적절한 명령어들의 모음이다.
명령 프롬프트창을 열고, C:\xampp\php로 이동한다.
echo @php "%~dp0phpunit.phar" %* > phpunit.cmd 입력 후, exit.
새로운 명령프롬프트창을 열고 phpunit --version을 해보자.
하기의 그림과 같이 설치가 된 것을 확인할 수 있다!
2016년 2월 16일 화요일
Smarty 설치하기
Smarty란, PHP 템플릿 엔진이다.
템플릿 엔진이란, 데이터베이스에 있는 정보들과 웹 템플릿에 있는 텍스트를 합쳐서
웹 문서로 만들어주는 역할을 의미한다.
Smarty 설치법
Smarty를 설치하기 위해선 PHP 5.2 이상의 버전이 필요하다.
http://www.smarty.net/docs/en/ 접속한 후에, 다운로드를 한다.
압축을 해제한 후, libs 폴더 안에 있는 파일들을 모두 복사한다.
다음으로, php.ini 파일을 열어서 include_path를 확인한다.
새로 만든 폴더의 경로를 추가해주었다.
Smarty폴더에 아까 복사한 파일들을 붙어넣기 해준다.
마지막으로, 붙어넣기 한 폴더에 templates, templates_c, configs, cache 폴더를 생성!
이것으로 모든 설치는 끝났다.
실제로 실행이 잘 되는 지 테스트를 해보자.
templates 폴더에 index.tpl 파일을 생성한 후, 하기의 그림과 같이 실행을 하면
Hello, Smarty! 라고 출력이 되는 걸 확인 할 수 있을 것이다!
2016년 1월 31일 일요일
PHP의 정규표현식(Regular Expression)
PHP의 정규표현식
cheat sheet: http://ult-tex.net/info/perl/
cheat sheet: http://ult-tex.net/info/perl/
PHP의 정규표현식은 구분자로 시작해서 구분자로 끝난다.
/php/ --->>> '/'가 구분자이다.
구분자는 정규표현식과 정규표현식이 아닌 것을 구분해주기 위함이다.
'/'대신, '#', '+', '%' 같은 특수기호도 사용가능
/jsp/i --->>> 'i'는 대소문자를 구분하지 않겠다는 의미
/body$/m --->>> '$'은 가장 끝의 경계점을 의미한다.
'm'은 멀티라인이다.
ex) everybody
body
body
Onebody
'm'이 없었으면, 제일 마지막에 있는 One뒤의 body가
선택되지만, 'm'으로 인하여 행 마다 있는 body가 다 선택된다.
\b: 단어의 경계를 의미한다.
\bweb\b --->>> 'web'이라는 독립된 단어를 가리킨다. 즉, 'web'을 가리킴
'webscript'에서도 'web'이 있지만 선택되지 않는다.
\s: 공백을 의미한다.
preg_match()의 리턴 값은, 해당 패턴을 찾았으면 1
찾지 못했으면 0
문법적 에러는 false
capturing: preg_match함수의 결과 값으로 데이터를 따로 대입시키기 위해 '()'로 감싸는 것.
ex) http://www.naver.com/index.html
preg_match('/http:\/\/([^/]+)/', subject, result)
([^/]+)로 감싸진, www.naver.com이 따로 결과 값으로 대입된다.
capturing할 때, 괄호 안에 '?:'를 기입하면 결과 값에 데이터가 따로 대입되지 않는다.
ex) http://www.daum.net/index.html
preg_match('/^(?:http://)?([^/]+)/', subject, result)
'^'는 행의 시작점을 의미한다. 만약 '[]'안에 있으면 Not을 의미
가장 처음에 http://가 있는 지 판단하는 데, '?' 때문에 없을 경우와
존재한다면 1개만 등장하도록 한다.
서브패턴안에 '?:' 있으므로, 'http://'는 결과 값에 따로 대입하지 않는다.
즉, 결과 값은 www.daum.net
ex) www.php.net
preg_match('/[^.]+\.[^.]+$/', subject, result)
'[^.]+\.[^.]+$'의 의미는 $때문에 행의 끝에서 부터 본다.
'[^.]+'는 '.'이 아닌 텍스트가 1개 이상인 경우, 즉 'net'
'\.'는 '.'을 가리키니까, 즉 net의 앞에 있는 '.'
'[^.]+'는 '.'이 아닌 텍스트가 1개 이상인 경우, 즉 'php
결과는 php.net
capturing할 때, 괄호 안에 ?P<key>으로 할 경우, 결과 값이 연관배열로 대입된다.
ex) foobar: 2008
preg_match('/(?P<name>\w+): (?P<digit>\d+)/', subject, result)
'\d'는 숫자를 의미
'?P<name>'로 인해, <name> 키 값에 foobar이 밸류로 대입
'?P<digit>'로 인해, <digit> 키 값에 2008이 밸류로 대입
결과는, [name] => boobar, [digit] => 2008
2016년 1월 18일 월요일
정규표현식3
수량자
{~~~}: 중괄호 안에 있는 값이 수량을 의미한다.
ex) '*'는 {0,}과 같다.
'+'는 {1,}과 같다.
'?'는 {0,1}과 같다.
*?: '*'뒤에 '?'가 오면, 수량자 0을 의미한다.
ex) One ring to bring them all and in the darkness bind them
r.*? --->>> 'r' 하나만을 가리킨다.
결과 First match: r
All matches: r, r, r, r ~~
+?: '+'뒤에 '?'가 오면, 수량자 1을 의미한다.
r.+? --->>> 'r'과 'r'뒤에 문자 하나를 같이 가리킨다.
결과 First match: ri
All matches: ri, ri, rk
??: '?'뒤에 '?'가 오면, 수량자 0을 의미한다.
r.?? --->>> 'r'하나만을 가리킨다.
탐욕적인 수량자(Greedy quantifier)
ex) <div>test</div><div>test2</div>
<div>.+</div> --->>> <div>test</div><div>test2</div> 모두 선택된다.
이렇게 맨 앞의 <div>와 맨 뒤의 </div>사이에 있는 모든 게 선택되는 것을
탐욕적인 수량자라고 한다.
게으른 수량자(Lazy quantifier)
<div>.+?</div> --->>> <div>test</div> 만 선택된다.
이렇게 맨 앞의 <div>와 처음으로 나타난 </div>까지 선택되는 것을
게르은 수량자라고 한다.
Character class
ex) A1 B2 c3 d_4 e:5 ffGG88--__--
\w --->>> 알파벳, 숫자, 언더라인('_')을 가리킨다
(\w를 'word'라고 부름)
결과 First match: A
All matches: A1, B2, c3~~~
\w* --->>> word를 0개 or 1개 or 2개 이상을 가리킨다.
결과 First match: A1
All matches: A1, B2, c3, ~~~
[a-z]\w* --->>> word앞에 a~z중 하나가 오는 것을 가리킨다.
결과 First match: c3
All matches: c3, d_4, e, ffGG88
[A-z0-9_] --->>> \w와 같다.
\W --->>> 대문자 'W'는 word의 반대를 가리킨다.
(공백, 특수문자, '.', ',' 등)
\d --->>> 0~9까지의 숫자를 가리킨다.
\D --->>> 소문자 'd'의 반대 즉, 숫자가 아닌 것을 가리킨다.
ex) Ere iron was b
\b: 어떠한 단어를 식별할 수 있다.
\b\w --->>> word가 시작되는 곳을 가리킨다.
결과 First match: E
All matches: E, i, w, b
\w\b --->>> word가 끝나는 곳을 가리킨다.
결과 First match: e
All matches: e, n, s, b
\b\w\b --->>> 단어가 하나인 것을 가리킨다.
결과 First match: b
ex) cat concat
\bcat --->>> 앞에 있는 'cat'을 가리킨다.
cat\b --->>> 뒤에 있는 'cat'을 가리킨다.
\A: 시작점을 의미한다.
\A.. --->>> 앞에 있는 'ca'을 가리킨다.
\Z: 제일 뒤에 있는 경계를 의미한다.
..\Z --->>> 뒤에 있는 'at'를 가리킨다.
Assertions
ex) AAAX----aaax---111---BBBXCCC
\w+(?=X) --->>> word가 1개 or 1개 이상이어야 하고,
옵션으로 대문자 'X' 앞까지 선택하라는 의미.
'?='는 특수기호이다.
문자열을 검색하는 데 'X'를 쓰지만, 선택할 때는 'X'를 제외.
결과 First match: AAA
All matches: AAA, BBB
\w+(?=\w) --->>> word가 1개 or 1개 이상이어야 하고,
옵션으로 word가 아닌 문자가 있을 경우,
word가 아닌 문자 앞에 있는 word를 기준으로,
해당 기준까지 선택하라는 의미(기준을 선택되지 않음)
결과 First match: AAA
('AAAX-'에서 'X'뒤에 '-'가 word가 아닌 문자이다.
'-'의 앞 문자인 'X'를 기준으로 해당 기준까지 선택되고
'X'는 선택을 받지 못한다.)
All matches: AAA, aaa, 11, BBBXCC
{~~~}: 중괄호 안에 있는 값이 수량을 의미한다.
ex) '*'는 {0,}과 같다.
'+'는 {1,}과 같다.
'?'는 {0,1}과 같다.
*?: '*'뒤에 '?'가 오면, 수량자 0을 의미한다.
ex) One ring to bring them all and in the darkness bind them
r.*? --->>> 'r' 하나만을 가리킨다.
결과 First match: r
All matches: r, r, r, r ~~
+?: '+'뒤에 '?'가 오면, 수량자 1을 의미한다.
r.+? --->>> 'r'과 'r'뒤에 문자 하나를 같이 가리킨다.
결과 First match: ri
All matches: ri, ri, rk
??: '?'뒤에 '?'가 오면, 수량자 0을 의미한다.
r.?? --->>> 'r'하나만을 가리킨다.
탐욕적인 수량자(Greedy quantifier)
ex) <div>test</div><div>test2</div>
<div>.+</div> --->>> <div>test</div><div>test2</div> 모두 선택된다.
이렇게 맨 앞의 <div>와 맨 뒤의 </div>사이에 있는 모든 게 선택되는 것을
탐욕적인 수량자라고 한다.
게으른 수량자(Lazy quantifier)
<div>.+?</div> --->>> <div>test</div> 만 선택된다.
이렇게 맨 앞의 <div>와 처음으로 나타난 </div>까지 선택되는 것을
게르은 수량자라고 한다.
Character class
ex) A1 B2 c3 d_4 e:5 ffGG88--__--
\w --->>> 알파벳, 숫자, 언더라인('_')을 가리킨다
(\w를 'word'라고 부름)
결과 First match: A
All matches: A1, B2, c3~~~
\w* --->>> word를 0개 or 1개 or 2개 이상을 가리킨다.
결과 First match: A1
All matches: A1, B2, c3, ~~~
[a-z]\w* --->>> word앞에 a~z중 하나가 오는 것을 가리킨다.
결과 First match: c3
All matches: c3, d_4, e, ffGG88
[A-z0-9_] --->>> \w와 같다.
\W --->>> 대문자 'W'는 word의 반대를 가리킨다.
(공백, 특수문자, '.', ',' 등)
\d --->>> 0~9까지의 숫자를 가리킨다.
\D --->>> 소문자 'd'의 반대 즉, 숫자가 아닌 것을 가리킨다.
ex) Ere iron was b
\b: 어떠한 단어를 식별할 수 있다.
\b\w --->>> word가 시작되는 곳을 가리킨다.
결과 First match: E
All matches: E, i, w, b
\w\b --->>> word가 끝나는 곳을 가리킨다.
결과 First match: e
All matches: e, n, s, b
\b\w\b --->>> 단어가 하나인 것을 가리킨다.
결과 First match: b
ex) cat concat
\bcat --->>> 앞에 있는 'cat'을 가리킨다.
cat\b --->>> 뒤에 있는 'cat'을 가리킨다.
\A: 시작점을 의미한다.
\A.. --->>> 앞에 있는 'ca'을 가리킨다.
\Z: 제일 뒤에 있는 경계를 의미한다.
..\Z --->>> 뒤에 있는 'at'를 가리킨다.
Assertions
ex) AAAX----aaax---111---BBBXCCC
\w+(?=X) --->>> word가 1개 or 1개 이상이어야 하고,
옵션으로 대문자 'X' 앞까지 선택하라는 의미.
'?='는 특수기호이다.
문자열을 검색하는 데 'X'를 쓰지만, 선택할 때는 'X'를 제외.
결과 First match: AAA
All matches: AAA, BBB
\w+(?=\w) --->>> word가 1개 or 1개 이상이어야 하고,
옵션으로 word가 아닌 문자가 있을 경우,
word가 아닌 문자 앞에 있는 word를 기준으로,
해당 기준까지 선택하라는 의미(기준을 선택되지 않음)
결과 First match: AAA
('AAAX-'에서 'X'뒤에 '-'가 word가 아닌 문자이다.
'-'의 앞 문자인 'X'를 기준으로 해당 기준까지 선택되고
'X'는 선택을 받지 못한다.)
All matches: AAA, aaa, 11, BBBXCC
2015년 12월 8일 화요일
정규표현식2
이어서 정규표현식의 서브패턴에 대해 알아보겠습니다.
|(파이프): 문자열 중에서 원하는 텍스트를 선택하고 싶은 경우 사용
ex) Monday Tuesday Friday 문자열
(on|ues|rida) --->>> 문자열 중에서 on이나 ues나 rida 추출하고 싶을 경우
결과 First match: on
All matches: on, ues, rida
(Mon|Tues|Fri)day --->>> 공통되는 부분을 서브패턴으로 빼서 추출하는 경우
결과 First match: Monday
All matches: Monday, Tuesday, Friday
..(id|esd|nd)ay --->>> 패턴 앞에 두개의 문자와 ay가 끝인 문자 추출하는 경우
결과 First match: Monday('nd'앞에 'Mo'가 있고, 'ay'로 끝)
All matches: Monday, Tuesday, Friday
수량자: 어떠한 패턴이 얼만큼 등장하는 가 숫자로 나타내는 경우
수량자에는 총 3가지가 있다 --->>> '*', '+', '?'
*(별): '*' 앞에 등장하는 문자가 몇번 등장하는지 판단 (0개 ~ 여러개)
ex) aabc abc bc 문자열
a*b --->>> b를 기준점으로 보고, b앞에 a가 있을 수도 있고, 없을 수도 있다.
즉, a가 0개, 1개, 여러 개여도 만족!
결과 First match: aab
All matches: aab, ab, b
+(더하기): '+' 앞에 문자가 1개 ~ 여러개 인 경우
a+b --->>> b앞에 a가 오는데, 반드시 1개 이상이여야 한다.
결과 First match: aab
All matches: aab, ab
?(물음표): '?' 앞에 문자가 없거나, 1개 인 경우
a?b --->>> b앞에 a가 없는 경우나 1개 인 경우
결과 First match: ab (예문 aabc에서 맨 앞 a가 빠지고 ab가 선택됨)
All matches: ab, ab, b
[]: 선택자 패턴의 후보군을 지정하는 경우
ex) -@- ***--"*"--***-@- 문자열
[-@]* --->>> 문자열 중 '-'나 '@' 중 하나만 있더라도 선택된다.
결과 First match: -@-
All matches: -@-, --, --, -@-
[^ ]+ --->>> []안에 '^'는 Not을 의미하므로, 공백이 아닌 것을 가리킨다.
즉, 공백이 아닌 것이 1개 이상인 경우
결과 First match: -@-
All matches: -@-, ***--"*"--***-@-
{}: 원하는 수량을 정확하게 지정하는 경우
ex) .{5} --->>> 5가 수량자이다. 어떤 문자건 간에 5개의 문자를 선택한다는 의미
One ring to bring 문자열에서 .{5}의 결과 값은 One r
One ring to bring them all and in the darkness 문자열
[els]{1,3} --->>> 'e'나 'l'이나 's'중 한 글자를 의미하고,
해당하는 문자가 1개 ~ 3개를 가리키는 의미
결과 First match: e
All matches: e, e, ll, e, ess
AB{0,}A --->>> 앞에 A와 뒤 A 사이에 B가 0개 ~ 여러 개를 의미(즉, 0개 이상)
2015년 11월 29일 일요일
정규표현식
정규표현식이란, 어떤 문자를 처리하기 위한 언어.
여기서 처리란, 어떠한 해당 텍스트가 존재하는 지 판단하고, 다른 텍스트로 치환을 의미.
정규표현식은 대소문자를 구분한다.
^(캐럿): 캐럿 뒤에 나오는 문자열이 소스 상에서 시작 위치에 있는 경우.
ex) who is who라는 텍스트가 있으면, ^who --->>> 첫째 who
$: 소스 상의 끝에 위치하는 문자열을 가리키는 경우
ex) who is who라는 텍스트가 있으면, who$ --->>> 마지막 who
\: 특수문자를 가리키는 경우
ex) \$ --->>> \뒤에 오는 $를 단순한 문자로 인식하게끔 설정(escape)
.: 어떠한 문자건 상관없이 그 문자, 공백, 특수문자를 가리키는 경우
ex) ...... --->>> .의 개수만큼인 6개의 문자를 가리킴
O.K. 라는 텍스트가 있으면, \..\. --->>> K
[]: []안에 해당하는 문자를 가리키는 경우
ex) How do you do? 라는 텍스트가 있으면, [oyu] --->>> o
[]를 하나의 문자로 인식하기 때문에, [dH]. --->>> Ho
[owy][yow] --->>> ow(첫 대괄호에 o, 두번째 대괄호에 w)
[c-k] === [cdefghijk]
[C-Ka-d2-6]는 C~K, a~d, 2~6까지를 의미
[]안에 캐럿이 있으면 not을 의미
[^CDghi45] --->>> 대괄호 안에 해당하지 않는 문자를 추출
여기서 처리란, 어떠한 해당 텍스트가 존재하는 지 판단하고, 다른 텍스트로 치환을 의미.
정규표현식은 대소문자를 구분한다.
^(캐럿): 캐럿 뒤에 나오는 문자열이 소스 상에서 시작 위치에 있는 경우.
ex) who is who라는 텍스트가 있으면, ^who --->>> 첫째 who
$: 소스 상의 끝에 위치하는 문자열을 가리키는 경우
ex) who is who라는 텍스트가 있으면, who$ --->>> 마지막 who
\: 특수문자를 가리키는 경우
ex) \$ --->>> \뒤에 오는 $를 단순한 문자로 인식하게끔 설정(escape)
.: 어떠한 문자건 상관없이 그 문자, 공백, 특수문자를 가리키는 경우
ex) ...... --->>> .의 개수만큼인 6개의 문자를 가리킴
O.K. 라는 텍스트가 있으면, \..\. --->>> K
[]: []안에 해당하는 문자를 가리키는 경우
ex) How do you do? 라는 텍스트가 있으면, [oyu] --->>> o
[]를 하나의 문자로 인식하기 때문에, [dH]. --->>> Ho
[owy][yow] --->>> ow(첫 대괄호에 o, 두번째 대괄호에 w)
[c-k] === [cdefghijk]
[C-Ka-d2-6]는 C~K, a~d, 2~6까지를 의미
[]안에 캐럿이 있으면 not을 의미
[^CDghi45] --->>> 대괄호 안에 해당하지 않는 문자를 추출
피드 구독하기:
글 (Atom)
결혼이민비자 신청방법(F-6-1 국민의 배우자)
제가 일본인 여자친구와 결혼 후, 한국에 귀국하기 위해 신청한 결혼이민비자에 대하여 작성해보도록 하겠습니다. 필자는 일본에서 근무하고 있었으며, 한국에서의 소득은 없었습니다. 결혼이민비자를 신청한 날짜는 2021-04-21 이며, 사증이 발급된 날짜...
-
Internet of Things 사물 인터넷(IoT) 사물 인터넷이란, 각종 사물에 센서와 통신 기능을 내장하여 인터넷에 연결하는 기술 여기서 사물이란, 가전제품, 모바일 장비, 웨어러블 컴퓨터 등 ...
-
MySQL 8.0.17 부터 추가된 Clone 플러그인에 대하여 알아보자. Clone plugin 이란 온라인으로 습득할 수 있는 풀 백업으로, 동일한 데이터의 MySQL 서버를 작성할 수 있다. Clone plugin 도입 MySQL 서버 패키지에 ...
-
지난 번에 알아본 Internal Temporary Table에서 소개한 MySQL 8.0부터 추가된 TempTable 스토리지 엔진에 대하여 알아보자( https://jongguheo.blogspot.com/2020/11/internal-tempor...







