제 강좌를 출처를 밝히고 외부로 퍼가는 것은 허용하지만,
다른 강좌의 자료나 책의 자료로 사용되거나 부분적인 인용은 허용하지 않습니다.
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개
감사합니다.
감사합니다.
주소값에서 뭔가 추출할때 많이 씁니다 ㅎㅎㅎ
드래그해서 에딧플러스로 저장하니 에러나네요 ㅜ.ㅜ
혹시 저같은분 계실까봐 아래에 올려놨습니당 ^^
소스를 html로 변환해서 올리다보니 빡십니다.
아마 간혹 그런것이 있을수 있으니 양해 부탁드립니다.
아래 코멘트 감사합니다.
$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;
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 230 | 20년 전 | 2038 | ||
| 229 | 20년 전 | 3131 | ||
| 228 | 20년 전 | 3322 | ||
| 227 | 20년 전 | 2384 | ||
| 226 | 20년 전 | 5458 | ||
| 225 | 20년 전 | 2508 | ||
| 224 | 20년 전 | 2953 | ||
| 223 | 20년 전 | 4196 | ||
| 222 | 20년 전 | 2595 | ||
| 221 | 20년 전 | 2277 | ||
| 220 | 20년 전 | 3666 | ||
| 219 | 20년 전 | 2063 | ||
| 218 | 20년 전 | 3552 | ||
| 217 | 20년 전 | 2469 | ||
| 216 | 20년 전 | 2896 | ||
| 215 | 20년 전 | 2205 | ||
| 214 | 20년 전 | 3324 | ||
| 213 | 20년 전 | 2909 | ||
| 212 | 20년 전 | 3040 | ||
| 211 | 20년 전 | 2137 | ||
| 210 | 20년 전 | 1869 | ||
| 209 | 20년 전 | 2333 | ||
| 208 | 20년 전 | 1961 | ||
| 207 | 20년 전 | 1666 | ||
| 206 | 20년 전 | 1848 | ||
| 205 | 20년 전 | 3938 | ||
| 204 | 20년 전 | 1669 | ||
| 203 | 20년 전 | 2002 | ||
| 202 | 20년 전 | 2343 | ||
| 201 | 20년 전 | 1814 | ||
| 200 | 20년 전 | 2943 | ||
| 199 | 20년 전 | 1997 | ||
| 198 | 20년 전 | 2077 | ||
| 197 | 20년 전 | 3641 | ||
| 196 | 20년 전 | 2965 | ||
| 195 | 20년 전 | 2084 | ||
| 194 | 20년 전 | 10229 | ||
| 193 | 20년 전 | 2235 | ||
| 192 | 20년 전 | 1580 | ||
| 191 | 20년 전 | 2652 | ||
| 190 | 20년 전 | 2281 | ||
| 189 | 20년 전 | 1671 | ||
| 188 | 20년 전 | 1464 | ||
| 187 | 20년 전 | 1895 | ||
| 186 | 20년 전 | 1694 | ||
| 185 | 20년 전 | 1729 | ||
| 184 | 20년 전 | 2326 | ||
| 183 | 20년 전 | 1538 | ||
| 182 | 20년 전 | 1473 | ||
| 181 | 20년 전 | 1612 | ||
| 180 | 20년 전 | 2708 | ||
| 179 | 20년 전 | 1787 | ||
| 178 | 20년 전 | 1841 | ||
| 177 | 20년 전 | 1967 | ||
| 176 | 20년 전 | 1791 | ||
| 175 | 20년 전 | 1864 | ||
| 174 | 20년 전 | 1685 | ||
| 173 | 20년 전 | 2053 | ||
| 172 | 20년 전 | 1776 | ||
| 171 | 20년 전 | 2551 | ||
| 170 | 20년 전 | 2257 | ||
| 169 | 20년 전 | 2537 | ||
| 168 | 20년 전 | 1464 | ||
| 167 | 20년 전 | 1564 | ||
| 166 | 20년 전 | 2140 | ||
| 165 | 20년 전 | 1604 | ||
| 164 | 20년 전 | 3748 | ||
| 163 | 20년 전 | 2642 | ||
| 162 | 20년 전 | 2063 | ||
| 161 | 20년 전 | 2768 | ||
| 160 | 20년 전 | 1716 | ||
| 159 | 20년 전 | 1592 | ||
| 158 | 20년 전 | 2543 | ||
| 157 | 20년 전 | 1471 | ||
| 156 | 20년 전 | 1713 | ||
| 155 | 20년 전 | 3222 | ||
| 154 | 20년 전 | 1877 | ||
| 153 | 20년 전 | 1607 | ||
| 152 | 20년 전 | 4933 | ||
| 151 | 20년 전 | 4560 | ||
| 150 | 20년 전 | 3499 | ||
| 149 | 20년 전 | 3770 | ||
| 148 | 20년 전 | 7050 | ||
| 147 | 20년 전 | 3535 | ||
| 146 | 20년 전 | 2600 | ||
| 145 | 20년 전 | 2597 | ||
| 144 | 20년 전 | 7158 | ||
| 143 | 20년 전 | 4583 | ||
| 142 | 20년 전 | 1889 | ||
| 141 | 20년 전 | 3244 | ||
| 140 | 20년 전 | 1945 | ||
| 139 | 20년 전 | 1537 | ||
| 138 | 20년 전 | 2289 | ||
| 137 | 20년 전 | 1768 | ||
| 136 | 20년 전 | 1446 | ||
| 135 | 20년 전 | 1778 | ||
| 134 | 20년 전 | 2958 | ||
| 133 | 20년 전 | 2429 | ||
| 132 | 20년 전 | 1702 | ||
| 131 | 20년 전 | 1629 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기