2018년 3월 21일 수요일

[PHP예제] 048 정규 표현식으로 패턴 매치

정규 표현식으로 패턴을 매치하려면 preg_match() 함수와 mb_ereg() 함수를 사용한다.
preg_match() 함수에서는 Perl 호환의 정규 표현식으로, mb_ereg() 함수에서는 mbstring 정규 표현식으로 매칭됨.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>정규 표현식으로 패턴 매치</title>
</head>
<body>
<div>
<?php
echo '<p>휴대 전화번호 형식 확인</p>';
echo '<ul>';

// 휴대 전화번호 형식을 확인하는 정규 표현식
// \A(010|011|080)은 문자열의 앞부분이 010, 011, 080 중 어느 것인지 확인
// -?는 하이픈 문자 또는 하이픈이 없는 경우를 포함해서 일치하는지 확인
// \d{4}는 네 개의 문자가 숫자인지 확인
// \d{4}\z는 문자열의 긑이 네 문자의 숫자로 된 것을 확인
// 예) 010-1234-5678, 01011112222
$telPattern = '/\A(010|011|080)-?\d{4}-?\d{4}\z/';

$tel1 = '010-1234-5678';
echo '<li>' . $tel1;
if( preg_match($telPattern, $tel1) ) {
    echo ' 는 전화번호 형식과 일치함</li>';
} else {
    echo ' 는 전화번호 형식과 일치하지 않음</li>';
}

$tel2 = '01112345678';
echo '<li>' . $tel2;
if( preg_match($telPattern, $tel2) ) {
    echo ' 는 전화번호 형식과 일치함</li>';
} else {
    echo ' 는 전화번호 형식과 일치하지 않음</li>';
}

$tel3 = 'abc-defg-hijk';
echo '<li>' . $tel3;
if( preg_match($telPattern, $tel3) ) {
    echo ' 는 전화번호 형식과 일치함</li>';
} else {
    echo ' 는 전화번호 형식과 일치하지 않음</li>';
}

echo '</ul>';


echo '<p>우편번호 형식 확인</p>';
echo '<ul>';

$zipPattern = '/\A\d{3}-?\d{3}\z/';

$zip1 = '456-789';
echo '<li>' . $zip1;
if( preg_match($zipPattern, $zip1) ) {
    echo ' 는 우편번호 형식과 일치함</li>';
} else {
    echo ' 는 우편번호 형식과 일치하지 않음</li>';
}

$zip2 = '456002';
echo '<li>' . $zip2;
if( preg_match($zipPattern, $zip2) ) {
    echo ' 는 우편번호 형식과 일치함</li>';
} else {
    echo ' 는 우편번호 형식과 일치하지 않음</li>';
}

$zip3 = 'abc-defg';
echo '<li>' . $zip3;
if( preg_match($zipPattern, $zip3) ) {
    echo ' 는 우편번호 형식과 일치함</li>';
} else {
    echo ' 는 우편번호 형식과 일치하지 않음</li>';
}
echo '</ul>';
?>
</div>
</body>
</html>



정규 표현식의 구문

Perl 호환의 정규 표현식에서는 패턴의 전후를 구분 문자로 표시해야 함
영숫자, 백슬러시, 공백 문자 외에 임의의 문자를 구분 문자로 사용할 수 있고 주로 슬래시(/)와 해시기호(#), 물결표(~)를 사용함.

구문 기능
. 줄 바꿈 문자를 제외한 모든 단일 문자
? 0회 또는 1회만 매치
* 0회 이상 반복
+ 1회 이상 반복
{n} n회 반복
{n, m} n회 이상, m회 이하 반복
^ 문자열(줄)의 시작
$ 문자열(줄)의 끝
[] 문자 클래스, [a-z]의 경우 a부터 z까지 임의의 한 문자
\A 문자열의 시작
\z 문자열의 끝
\w 단어 구성 문자.
[a-zA-Z0-9_]와는 다를 수 있으므로 주의
\d 숫자
\s 탭, 공간, 줄 바꿈 등의 공백 문자
\S 공백 문자 외의 모든 문자
() () 패턴의 그룹화

패턴 수식자의 예

패턴 수식자 기능
i 매칭시 알파벳의 대문자와 소문자를 구별하지 않음
m 줄 단위로 매칭을 진행
s '.'을 줄 바꿈 문자에도 매칭
u 패턴 문자열을 UTF-8 인코딩으로 취급
x 이스케이프 되거나 문자 클래스의 내부를 제외하고 패턴의 공백 문자를 무시






댓글 없음:

댓글 쓰기