Transcript 따옴표와 정규 표현식
10장 따옴표와 정규 표현식
>> 목 표 <<
. echo에 따옴표 사용
. 문자열 제어
. 정규 표현식
1. Echo에 따옴표 사용
1.1 같은 따옴표 쌍을 이용하여 내용을 출력
echo “hello, PHP”;
echo ‘hello, PHP’;
1.2 따옴표 안에 따옴표 넣기
– 큰 따옴표 쌍 안에는 작은 따옴표
– 작은 따옴표 쌍 안에는 큰 따옴표를 넣으면 출력된다.
– 다른 경우
echo “name \”Lee\” ?”;
echo ‘um \’Kim ?’;
1.3 addslashes()와 stripslashes()
– <form> 태그에서 값 넘기기
Php.ini의 magic_quotes_gpc = off 자동으로 \를 “앞에 붙이지 않음
– 파일 패스 설정시 백슬래시(\) 1개와 2개는 1개로 인식
1.4 문자열 합치기 ( . )
– $name= $f_name.’ ‘.$z_name;
1.5 따옴표 안의 변수 값 출력
– 큰 따옴표(“)를 사용해서만 변수 값을 출력할 수 있다.
– 중괄호 ({ })을 출력하기 위해서 백슬래시(\)를 사용한다.
Echo “value = \{$var}”;
1.6 htmlspecialchars() 사용하기
– HTML 태그를 입력 받지 못하게 하기 위하여
1.7 배열에서 따옴표: 모두 가능
<?php
$a[apple] =“apple+사과”;
echo $a[apple]. “<br>”;
echo $a[‘apple’]. “<br>”;
edho $a[“apple”]. “<br>”;
?>
2. 문자열 제어
문자열 비교 : $str1 == $str2
substr() : 문자열의 일부분을 추출하는 함수
explode() : 분리자를 이용하여 문자열을 나누고 배열로 만듬
str_replace()
$text = str_replace(“a”, “<br>”, $text);
ereg_replace()
$string = ereg_replace(“_”, “k”, $b);
3. 정규 표현식
3.1 정규 표현식
– (1) 정규 표현식 문법
– (2) 정규 표현식 활용
3.2 preg_match(), preg_replace()
3.1 정규 표현식
유닉스에서 유래
정의 :
– 어떠한 “문자열”의 집합을 정확하게 나타내기 위한 “표현 규칙”
응용
– 형식 언어 이론
– 문서 편집기에서 문자열 검색 (패턴 매칭용)
– PHP에서 e-mail, 우편번호, 전화번호 검색
(1) 정규 표현식 문법
시작과 끝 그리고 반복을 나타내는 정규 표현식
시작과
끝, 반복
설 명
예제
^
문자열의 시작과 부합
(바로 뒤에 오는 문자열로 시작하는 모든 문자열)
^the (the로 시작하는 모든 문자열)
$
문자열의 맨 마지막을 의미
(바로 앞의 문자열로 끝나는 모든 문자열)
ed$ (ended, embed, …)
.
임의의 한 문자 의미
w.w (wow, wiw, …) .ow (wow, Kow, …)
*
바로 앞의 문자가 하나도 없거나 하나 이상 반복되
는 모든 경우
A*C (C, AC, AAC, …)
AB*(A, AB, ABB … )
+
바로 앞과 바로 뒤에 있는 문자가 포함된 문자열
A+B (AB, AAB, ABB, ABC … )
?
바로 앞에 있는 문자가 1개 있거나 없을 경우
Wo?W (Ww, Wow 딱 두 경우)
(1) 정규 표현식 문법 (cont’d)
그룹과 개수
그룹과
개수
설 명
예제
[]
[]안의 문자열 중 한 문자만을 나타냄
OR조건으로 안의 문자 중 하나라도 있는 문자열을 의미
[abcd] ( a, add, ab, bo… )
{}
{}앞에 있는 문자나 문자열의 개수를 갖는 문자열
d{2} (add, ddanzi …)
A{1,3}B ( AB, AAB, AAAB …)
()
()안에 있는 글자들을 그룹화한다.
a(bc) (abc, abcbc, tabc … )
|
OR연산자 기능, 바로 앞과 뒤의 문자/문자열을 가진 문자
열
Who|I (Who am I)
(1) 정규 표현식 문법 (cont’d)
문자 클래스
문자 클래스
설 명
[[:alpha:]]
[a-zA-Z]와 동일
[[:digit:]]
모든 숫자
[[:alnum:]]
모든 문자나 숫자
[[:space:]]
공백 문자 의미
[[:punct:]]
모든 구두점 기호
(1) 정규 표현식 문법 (cont’d)
다중 일치
다중 일치
^a{3}$
a(b{2,})
a(b{2,4})
\t{2}
T[ao]ook
설 명
aaa에만 부합
a와 두 개 이상의 b들로 된 문자열에 부합, abbb, abbbb, …
a와 두 개 이상, 네 개 이하의 b들로 된 문자열에 부합
2개의 탭과 부합
Taook또는 Toook에만 부합
a(bc)*
a, abc, abcbc 등 ‘bc’가 없거나 하나 이상이 경우에 부합
^[1-9][0-9]*$
처음 숫자가 0이 아니고 끝까지 숫자에만 부합. 자격 체크
^[0-9]+(\.[0-9]{2})?$
처음은 숫자, \.은 단지 점(.)만 표시. 3.23 나 3.38과 부합 (?????)
(1) 정규 표현식 문법 (cont’d)
예) 이메일 주소의 타당성 검사
– 이메일의 주소체계 : 사용자아이디@도메인명
– “@” 앞부분
영문 대소문자, 숫자, . , -, _ 가 오는 문자열
[_\.a-zA-Z0-9-]로 구성
그러나 “.”으로 시작할 수 없음
[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*
– “@” 뒷부분 : 앞부분과 동일
^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$
<?php
$exp = "[예제:12] 테스트입니다.";
$result = ereg("\[예제:[1-9]\]", $exp);
// ereg("\[예제:[1-9]*\]", $exp);
if($result)
{
echo ("문자열을 찾았습니다.<br>");
echo "원문: $exp <br>";
$replace = ereg_replace ("예제", "보기", $exp);
echo "---> $replace <br>";
}
else
{
echo ("문자열을 못 찾았습니다.<br>");
echo "원문: $exp <br>";
$replace = ereg_replace (@@@@ , @@, $exp); // 숫자를 모두 #으로 바꾸시오.!!
echo "---> $replace <br>";
}
?>