PHP 5.3.0 에서 사라진 함수들 대체 본문
PHP 5.3.0 에서 사라진 함수들 대체
- 2016. 5. 7. 01:50
원본/출처 :
http://blog.arzz.com/409
PHP 5.3.0 버전 이상에서 사라져버린 비운의 함수들이 있습니다. 바로 POSIX Regex 함수들입니다. 대부분 많이들 써왔던 함수이기에, 저도 그렇고 아직까지 많은분들이 5.3.0 이상 버전으로 업데이트를 하지 못하고 있을 듯 합니다.
하지만, PHP 6.0.0 이상버전부터 완전히 사라질 이 함수들을 언제까지고 끌고갈 수 없기때문에 대체함수(?)로 바꾸는 방법을 간단하게 설명할려고 합니다.
split함수
split은 특정패턴으로 문자열을 잘라주는 함수입니다.
예를 들어, $arr = split(',', '아빠,엄마'); 라고 한다면 $arr 에는 Array('아빠','엄마'); 가 되는 것이지요.
이함수는 5.3.0 이상버전부터 explode함수로 대체되어야 합니다. 사용방법은 똑같습니다만, split함수가 정규식을 지원했다면 explode는 하지 않는다라는 것이 다릅니다.
ereg함수
ereg계열의 함수는 정규식으로 문자열을 찾거나, 찾은문자열을 바꾸거나 하는 함수입니다.
ereg_replace($patten, $replacement, $string); 형태로 쓰입니다.
이 함수는 5.3.0 이상부터 preg_replace로 바꾸어야합니다. 두개의 함수의 인자순서는 같지만, ereg함수와 preg함수는 정규식을 표현하는 방법이 약간 틀립니다.
$str = ereg_replace('[a-z]+', 'A', $str);
ereg함수가 위와 같이 정규식을 적었다면, preg함수는 아래와 같이 적습니다.
$str = preg_replace('/[a-z]+/', 'A', $str);
그리고 ereg계열이 대소문자를 구분하는 것과 구분하지 않는 것이 ereg, eregi 두가지 함수로 구분되었다면, preg는 하나의 함수로 처리됩니다. 예를 들어 위의 preg_replace 함수의 정규식에서 대소문자를 구분하지 않겠다고 한다면, 아래와 같이 i가 추가됩니다.
$str = preg_replace('/[a-z]+/i', 'A', $str);
그 외에 문자열을 검색하던 ereg함수는 preg_match함수로 대체되어야 합니다.
$str = 'abcedf';
if (ereg('[abc]'. $str, $matches) == true) print_r($matches);
뭐 저런식으로 ereg함수를 사용하듯이 preg_match함수도 사용하면 되지만 정규식 입력부분은 역시 약간 다릅니다.
$str = 'abc123abc';
if (preg_match('/([a-z]+)([0-9]+)/', $str, $matches) == true) print_r($matches);
위의 처럼 3번째 인자에 검색된 패턴이 배열로 담기는 인자를 넣습니다.
preg_match가 true가 된다면, $matches안에는 일치된 문자열이 배열로 들어가게 되죠. 정규식에 ( ) 가 없다면 $matches[0]에 일치된 전체패턴이 들어가게 되겠고, ( )가 있다면 $matches[0] 이후의 $matches[1]부터 ( ) 안의 일치부분만 빼올 수 있습니다.
더 설명했다간, 정규식 강좌가 될듯 하니 적당히 멈추도록 하겠습니다. = _=;;;
어쨋든, 몇몇 사라진 함수들이 있으니, 소스파일을 쭉 열어놓고, 열심히 바꾼다음 PHP버전업을 해줘야 할 것 같습니다. 망할!!
RECENT COMMENT