제 강좌를 출처를 밝히고 외부로 퍼가는 것은 허용하지만,
다른 강좌의 자료나 책의 자료로 사용되거나 부분적인 인용은 허용하지 않습니다.
PCRE 는 preg_ 로 시작되는 내장함수와 함께 사용되어지는 정규표현식을 말합니다.
PCRE > 정규표현식 관련 내장함수 preg_grep, preg_match
이전 내용에서는 정규표현식의 패턴변경자 i, m, s 에 대하여 알아보았습니다.
이번 내용에서는 다음 패턴변경자를 다루기 전에 내장함수 preg_grep 과 preg_match 에 대해서 알아보겠습니다 .
array preg_grep ( string $pattern , array $input [, int $flags = 0 ] )
설명 : 입력받은 문자열 배열 중 에서 주어진 패턴과 매치되는 배열의 원소를 배열 로 다시 돌려줍니다.
인자 :
-> string $pattern : 문자열로 된 정규 표현식 패턴
-> array $input : 문자열 배열
-> int $flags : 생략가능하며, PREG_GREP_INVERT (1) 상수와 같이 사용할수 있음
결과값 :
패턴과 일치하는 배열의 원소를 원래의 키와 값을 사용한 배열로 돌려줍니다.
일치하는 것이 없을 경우에는 빈배열 Array()를 다시 돌려줍니다.
단, $falgs 의 값이 1 일 경우에는 반대로 동작합니다.
즉, 일치하지 않는 배열의 원소를 배열로 돌려줍니다.
용도 :
동일한 패턴을 가지는 여러 문자열을 배열로 받아서 패턴과 일치 여부를 판단할때,
예를 들면, 관리자 리스트 같은 곳에서 여러개의 값을 선택하여 넘어왔을 경우,
그 넘어온값을 한꺼번에 체크할때 같은 경우에 사용할수 있습니다.
예제21> test21.php
$ids = Array() ;
$ids[] = 'dbckdghk' ;
$ids['a'] = 'dbckdghk1' ;
$ids[] = 'dbckdghk1_' ;
$ids[] = 'dbckdghkdbckdghk' ; // 16자
$ids['b'] = 'DBCKDGHK' ;
$ids[] = 'dbc' ; // 3자
$ids['c'] = 'DbCKdGHk1_' ;
$ids[] = 'dbckdghk&' ; // _ 이외의 특수 문자
$ids['가'] = '유창화' ; // 한글
echo "입력받은 원래 배열 : <br>" . PHP_EOL;
print_r($ids);
echo "<br><br>" . PHP_EOL;
// 영어 알파벳(대소문자 구분없음), 숫자, _ 만 사용 가능하며, 4자이상 10자 이하
$return = preg_grep("`^[0-9a-z_]{4,10}$`i", $ids) ; // $flags default 0 사용
echo "\$flags default 0 사용 : <br>" . PHP_EOL;
print_r($return);
echo "<br><br>" . PHP_EOL;
// 영어 알파벳(대소문자 구분없음), 숫자, _ 만 사용 가능하며, 4자이상 10자 이하
$return = preg_grep("`^[0-9a-z_]{4,10}$`i", $ids, 1) ; // $flags 1 사용
echo "\$flags 1 사용 : <br>" . PHP_EOL;
print_r($return);
echo "<br><br>" . PHP_EOL;
?>
결과 :
Array ( [0] => dbckdghk [a] => dbckdghk1 [1] => dbckdghk1_ [2] => dbckdghkdbckdghk [b] => DBCKDGHK [3] => dbc [c] => DbCKdGHk1_ [4] => dbckdghk& [가] => 유창화 )
$flags default 0 사용 :
Array ( [0] => dbckdghk [a] => dbckdghk1 [1] => dbckdghk1_ [b] => DBCKDGHK [c] => DbCKdGHk1_ )
$flags 1 사용 :
Array ( [2] => dbckdghkdbckdghk [3] => dbc [4] => dbckdghk& [가] => 유창화 )
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
설명 : 입력받은 문자열이 주어진 패턴과 일치하는 검사
인자 :
-> string $pattern : 문자열로 된 정규 표현식 패턴
-> string $subject : 검사하고자 하는 문자열
-> array &$matches : 생략 가능하며, 사용시 패턴에 매치되는 내용을 $matches 배열에 담아줌
-> int $flags : 생략가능하며, PREG_OFFSET_CAPTURE (256) 상수와 같이 사용할수 있음
-> int $offset : 생략가능하며, 검사 시작 지점을 지정할수 있음
결과값 :
패턴과 매치되는 문자열을 찾았을 때는 1 을 반환, 못 찾았을 때는 false 를 반환.
용도 :
특정 패턴의 문자열이 존재하는지 여부를 확인 할때나,
특정 패턴의 문자열을 찾아서 그 문자열을 알고 싶을때 사용합니다
참조란, 쉽게 설명하자면, 특정 변수 앞에 & 를 붙임으로서 사용할 수 있는 것으로써,외부의 변수를 함수의 인자로 받아서 함수 내부에서 변하는 값도 원래의 변수에 반영되는 것을 뜻합니다.
즉, 참조를 사용하면, 특정함수에서 리턴값이 없더라도 참조를 통해 어떤 원하는 결과값을 받을수가 있습니다.
preg_match 의 결과값은 검사를 수행하고 1 이나 false 만을 반환하는데, 세부적인 매치된 내용까지 알기 위해서 자동 참조를 통해서 값을 받는 것입니다.
예제22> test22.php
// 함수에서 자동 참조 사용
function test_function(&$a){
$a = 5 ;
}
$b = 10 ;
echo "원래의 \$b 값은 : " . $b . " <br>" . PHP_EOL;
test_function($b);
echo "test_function(\$b); 를 실행한 이후의 \$b 값은 : " . $b . " <br><br>" . PHP_EOL;
function test_function2($a){
$a = 5 ;
}
$b = 10 ;
echo "원래의 \$b 값은 : " . $b . " <br>" . PHP_EOL;
test_function2($b);
echo "test_function2(\$b); 를 실행한 이후의 \$b 값은 : " . $b . " <br>" . PHP_EOL;
test_function2(&$b); // 사용자가 사용시 참조 사용
echo "test_function2(&\$b); 를 실행한 이후의 \$b 값은 : " . $b . " <br><br>" . PHP_EOL;
// 배열 자동 참조
function test_function3(&$a=Array()){
$a = array('c', 'd', 'f') ;
}
$b = Array('a','b','c') ;
$c = 'abc' ;
$d = '' ;
echo "원래의 \$b 값은 : ";
print_r($b);
echo " <br>" . PHP_EOL;
test_function3($b);
echo "test_function3(\$b); 를 실행한 이후의 \$b 값은 : ";
print_r($b);
echo " <br><br>" . PHP_EOL;
echo "원래의 \$c 값은 : ";
echo $c;
echo " <br>" . PHP_EOL;
test_function3($c);
echo "test_function3(\$c); 를 실행한 이후의 \$c 값은 : ";
print_r($c);
echo " <br><br>" . PHP_EOL;
echo "원래의 \$d 값은 : ";
echo $d;
echo " <br>" . PHP_EOL;
test_function3($d);
echo "test_function3(\$d); 를 실행한 이후의 \$d 값은 : ";
print_r($d);
echo " <br><br>" . PHP_EOL;
?>
결과 :
test_function($b); 를 실행한 이후의 $b 값은 : 5
원래의 $b 값은 : 10
test_function2($b); 를 실행한 이후의 $b 값은 : 10
test_function2(&$b); 를 실행한 이후의 $b 값은 : 5
원래의 $b 값은 : Array ( [0] => a [1] => b [2] => c )
test_function3($b); 를 실행한 이후의 $b 값은 : Array ( [0] => c [1] => d [2] => f )
원래의 $c 값은 : abc
test_function3($c); 를 실행한 이후의 $c 값은 : Array ( [0] => c [1] => d [2] => f )
원래의 $d 값은 :
test_function3($d); 를 실행한 이후의 $d 값은 : Array ( [0] => c [1] => d [2] => f )
이 네번째 인자를 사용하게 되면, 패턴과 매치되는 문자열이 있을 경우 그 문자열과 그 문자열이 처음 위치하는 offset (위치) 를 같이 세번째 인자 배열에 저장합니다.
예제23> test23.php
$subject = "abcdef" ;
$pattern = '/def/' ;
preg_match($pattern, $subject, $matches);
echo "preg_match('$pattern', '$subject', \$matches); 를 실행한 이후의 \$matches 값은 : ";
echo " <br>" . PHP_EOL;
print_r($matches);
echo " <br><br>" . PHP_EOL;
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); // 매치되는 문자열의 시작 위치를 같이 $matches 에 저장
echo "preg_match('$pattern', '$subject', \$matches, PREG_OFFSET_CAPTURE); 를 실행한 이후의 \$matches 값은 : ";
echo " <br>" . PHP_EOL;
print_r($matches);
echo " <br><br>" . PHP_EOL;
// 서브 패턴이 포함 되었을 때의 결과
$pattern = '/d(ef)/';
preg_match($pattern, $subject, $matches);
echo "preg_match('$pattern', '$subject', \$matches); 를 실행한 이후의 \$matches 값은 : ";
echo " <br>" . PHP_EOL;
print_r($matches);
echo " <br><br>" . PHP_EOL;
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); // 매치되는 문자열의 시작 위치를 같이 $matches 에 저장
echo "preg_match('$pattern', '$subject', \$matches, PREG_OFFSET_CAPTURE); 를 실행한 이후의 \$matches 값은 : ";
echo " <br>" . PHP_EOL;
print_r($matches);
echo " <br><br>" . PHP_EOL;
?>
결과 :
Array ( [0] => def )
preg_match('/def/', 'abcdef', $matches, PREG_OFFSET_CAPTURE); 를 실행한 이후의 $matches 값은 :
Array ( [0] => Array ( [0] => def [1] => 3 ) )
preg_match('/d(ef)/', 'abcdef', $matches); 를 실행한 이후의 $matches 값은 :
Array ( [0] => def [1] => ef )
preg_match('/d(ef)/', 'abcdef', $matches, PREG_OFFSET_CAPTURE); 를 실행한 이후의 $matches 값은 :
Array ( [0] => Array ( [0] => def [1] => 3 ) [1] => Array ( [0] => ef [1] => 4 ) )
예제24> test24.php
$subject = "abcdef" ;
$pattern = '/d(ef)/' ;
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 2);
echo "preg_match('$pattern', '$subject', \$matches, PREG_OFFSET_CAPTURE, 2); 를 실행한 이후의 \$matches 값은 : ";
echo " <br>" . PHP_EOL;
print_r($matches);
echo " <br><br>" . PHP_EOL;
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
echo "preg_match('$pattern', '$subject', \$matches, PREG_OFFSET_CAPTURE, 3); 를 실행한 이후의 \$matches 값은 : ";
echo " <br>" . PHP_EOL;
print_r($matches);
echo " <br><br>" . PHP_EOL;
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 4);
echo "preg_match('$pattern', '$subject', \$matches, PREG_OFFSET_CAPTURE, 4); 를 실행한 이후의 \$matches 값은 : ";
echo " <br>" . PHP_EOL;
print_r($matches);
echo " <br><br>" . PHP_EOL;
?>
결과 :
Array ( [0] => Array ( [0] => def [1] => 3 ) [1] => Array ( [0] => ef [1] => 4 ) )
preg_match('/d(ef)/', 'abcdef', $matches, PREG_OFFSET_CAPTURE, 3); 를 실행한 이후의 $matches 값은 :
Array ( [0] => Array ( [0] => def [1] => 3 ) [1] => Array ( [0] => ef [1] => 4 ) )
preg_match('/d(ef)/', 'abcdef', $matches, PREG_OFFSET_CAPTURE, 4); 를 실행한 이후의 $matches 값은 :
Array ( )
댓글 19개
$ids = Array() ;
$ids[] = 'dbckdghk' ;
$ids['a'] = 'dbckdghk1' ;
$ids[] = 'dbckdghk1_' ;
$ids[] = 'dbckdghkdbckdghk' ; // 16자
$ids['b'] = 'DBCKDGHK' ;
$ids[] = 'dbc' ; // 3자
$ids['c'] = 'DbCKdGHk1_' ;
$ids[] = 'dbckdghk&' ; // _ 이외의 특수 문자
$ids['가'] = '유창화' ; // 한글
echo "입력받은 원래 배열 : <br>" . PHP_EOL;
print_r($ids);
echo "<br><br>" . PHP_EOL;
// 영어 알파벳(대소문자 구분없음), 숫자, _ 만 사용 가능하며, 4자이상 10자 이하
$return = preg_grep("`^[0-9a-z_]{4,10}$`i", $ids) ; // $flags default 0 사용
echo "$flags default 0 사용 : <br>" . PHP_EOL;
print_r($return);
echo "<br><br>" . PHP_EOL;
// 영어 알파벳(대소문자 구분없음), 숫자, _ 만 사용 가능하며, 4자이상 10자 이하
$return = preg_grep("`^[0-9a-z_]{4,10}$`i", $ids, 1) ; // $flags 1 사용
echo "$flags 1 사용 : <br>" . PHP_EOL;
print_r($return);
echo "<br><br>" . PHP_EOL;
$subject = "abcdef" ;
$pattern = '/def/' ;
preg_match($pattern, $subject, $matches);
echo "preg_match('$pattern', '$subject', \$matches); 를 실행한 이후의 \$matches 값은 : ";
echo " <br>" . PHP_EOL;
print_r($matches);
echo " <br><br>" . PHP_EOL;
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); // 매치되는 문자열의 시작 위치를 같이 $matches 에 저장
echo "preg_match('$pattern', '$subject', \$matches, PREG_OFFSET_CAPTURE); 를 실행한 이후의 \$matches 값은 : ";
echo " <br>" . PHP_EOL;
print_r($matches);
echo " <br><br>" . PHP_EOL;
// 서브 패턴이 포함 되었을 때의 결과
$pattern = '/d(ef)/';
preg_match($pattern, $subject, $matches);
echo "preg_match('$pattern', '$subject', \$matches); 를 실행한 이후의 \$matches 값은 : ";
echo " <br>" . PHP_EOL;
print_r($matches);
echo " <br><br>" . PHP_EOL;
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); // 매치되는 문자열의 시작 위치를 같이 $matches 에 저장
echo "preg_match('$pattern', '$subject', \$matches, PREG_OFFSET_CAPTURE); 를 실행한 이후의 \$matches 값은 : ";
echo " <br>" . PHP_EOL;
print_r($matches);
echo " <br><br>" . PHP_EOL;
게시글 목록
| 번호 | 제목 |
|---|---|
| 535 | |
| 534 | |
| 533 | |
| 522 |
이미지관련
문자열이미지에 각종 필터를 적용한 결과
7
|
| 521 |
이미지관련
이미지에 각종 필터를 적용한 결과
2
|
| 520 |
이미지관련
프레임이미지와 얼굴이미지 합치기
|
| 517 | |
| 516 | |
| 511 |
이미지관련
이미지 너비에 맞게 문자열의 자동 개행
2
|
| 508 | |
| 507 |
이미지관련
문자열 그릴때 패딩 주기
2
|
| 500 |
이미지관련
위치에 따른 이미지에 문자열 그리기
6
|
| 493 | |
| 490 |
이미지관련
문자열의 너비와 높이 구하기
1
|
| 486 |
이미지관련
이미지에 글자 쓰기
5
|
| 463 | |
| 461 | |
| 444 | |
| 435 | |
| 334 | |
| 304 | |
| 290 |
정규표현식
정규표현식 의 핵심. 패턴변경자 1
20
|
| 244 | |
| 233 |
정규표현식
설문조사 진행 중입니다. ~1월 28일까지
|
| 218 | |
| 217 | |
| 194 | |
| 185 | |
| 181 | |
| 156 |
정규표현식
정규표현식의 기본구조
17
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기