[PHP] 문자열 검색, 문자열 찾기 혹은 비교 함수(preg_match, strpos, strstr, stripos 등)

구피아 4년전 신고 

PHP 문자열 찾기 함수를 알아보기로 하겠습니다. PHP에서 문자열 검색 혹은 비교하는 함수는 여러 가지가 있습니다.

 

예전에는 ereg(), eregi() 함수가 사용되었다고 하는데요. PHP 5.3 버전부터는 성능상의 이유로 삭제되었다고 하네요.

 

이번에 알아볼 함수들은 다음과 같습니다.

 

preg_match() / strpos() / strrpos() / strstr() / stripos() / strripos() / mb_strpos() / mb_strrpos() / mb_stripos() / mb_strripos() 함수입니다.

 

 

1. preg_match($pattern, $subject, $matches) 함수

- 문자열 안에서 특정한 정규식 패턴의 존재 여부를 찾는데 유용한 내장함수입니다.

- 문자열($subject)에 패턴($pattern)과 일치하는 것이 있다면 참을 반환합니다.

- 패턴임을 알리기 위해 앞뒤로 슬래쉬( / )를 붙여줘야 합니다.

- 마지막 슬래쉬 뒤에 여러 가지 옵션을 붙일 수 있습니다.

- 예) /패턴/i 이런 식으로... i는 대소문자를 구분하지 않음을 의미합니다.

- 패턴과 일치하는 데이터가 있다면 $matches 배열에 저장됩니다.

- 첫 번째 배열 요소($matches[0])에는 패턴과 일치하는 데이터가 대입됩니다.

- 두 번째 배열 요소($matches[1])에는 패턴 내에 괄호로 묶인 부분에 해당하는 데이터가 대입됩니다.

 

$subject = "I just want to look forward to the future.";

$pattern = "/([a-zA-Z]+ )+/";

if(preg_match($pattern, $subject, $matches))

    echo "일치하는 패턴이 있습니다. (".$matches[0].")";

else

    echo "일치하는 패턴이 없습니다.";

 

* 패턴에 [a-zA-Z]이면 알파벳 영문 / [가-힣]이면 한글을 검색 혹은 비교할 수 있습니다.

 

* 문자셋이 EUC-KR 경우

/[\xA1-\xFE\xA1-\xFE]/

 

* 문자셋이 UTF-8 경우

$pattern = "/[가-힣 ]+/"; 혹은

$pattern = "/[{\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF} ]+/u";

 

 

2. strpos([대상 문자열], [조건 문자열], [검색 시작 위치]) 함수

/ strrpos([대상 문자열], [조건 문자열], [검색 시작 위치]) 함수

- strpos()는 대상 문자열을 앞부분부터 검색하여 조건 문자열이 몇 번째 위치에 있는지를 찾는 함수입니다.

- strrpos()는 대상 문자열을 뒷부분부터 검색하여 조건 문자열이 몇 번째 위치에 있는지를 찾는 함수입니다.

- 두 함수 모두 영문자의 대소문자를 구별하여 검색합니다.

- boolean을 받아올 때, 참이면 '===', 거짓이면 '!=='을 사용해야 합니다.

 

$gp_string = "abc abc abc";

$gp_find = "c";

$pos = strpos($gp_string, $gp_find);

$rpos = strrpos($gp_string, $gp_find);

 

if ($pos === false) {

   echo "strpos() : <br/>\"".$gp_string."\" 문자열에서 \"".$gp_find."\" 문자열을  찾지 못했습니다.<br/><br/>";

} else {

   echo "strpos() : <br/>\"".$gp_string."\" 문자열에서 \"".$gp_find."\" 문자열을 찾았습니다.<br/>";

   echo "찾는 문자열은 ".$pos."번째 위치에 존재합니다.<br/><br/>";

}

if ($rpos === false) {

   echo "strrpos() : <br/>\"".$gp_string."\" 문자열에서 \"".$gp_find."\" 문자열을  찾지 못했습니다.<br/>";

} else {

   echo "strrpos() : <br/>\"".$gp_string."\" 문자열에서 \"".$gp_find."\" 문자열을 찾았습니다.<br/>";

   echo "찾는 문자열은 ".$rpos."번째 위치에 존재합니다.";

}

 

 

3. strstr ($haystack, $needle[, bool $before_needle = false ]) 함수

- 검색할 문자열($haystack) 내에서 찾을 문자열($needle)이 있는지 검색하는 함수입니다.

- 검색은 왼쪽부터 시작되며, 찾은 문자열($needle)부터 문자열($haystack) 마지막까지 반환합니다.

 

$gp_email = "";

$gp_domain = strstr($gp_email, '@');

echo "도메인 : ".$gp_domain;

echo "<br/>";

$gp_user = strstr($gp_email, '@', true);

echo "사용자 : ".$gp_user;

 

 

4. stripos([대상 문자열], [조건 문자열], [시작 위치]) 함수

/ strripos([대상 문자열], [조건 문자열], [시작 위치]) 함수

- stripos()는 대상 문자열을 앞부분부터 검색하여 조건 문자열이 몇 번째 위치에 있는지 리턴합니다.

- strripos()는 대상 문자열을 뒷부분부터 검색하여 조건 문자열이 몇 번째 위치에 있는지 리턴합니다.

- 두 함수 모두 영문자의 대소문자를 구별하지 않습니다.

- 시작 위치는 생략 가능하며, 지정할 경우 검색될 문자열 범위는 '시작 위치~마지막'까지가 됩니다..

 

$gp_email = "";

$gp_domain = stripos($gp_email, 'a');

echo "stripos : ".$gp_domain;

echo "<br/>";

$gp_domain = stripos($gp_email, 'a', 5);

echo "stripos : ".$gp_domain;

echo "<br/>";

$gp_domain = strripos($gp_email, 'a');

echo "strripos : ".$gp_domain;

echo "<br/>";

$gp_domain = strripos($gp_email, 'a', 12);

echo "strripos : ".$gp_domain;

 

 

5. mb_strpos([대상 문자열], [조건 문자열], [시작위치], [인코딩]) 함수

/ mb_strrpos([대상 문자열], [조건 문자열], [시작위치], [인코딩]) 함수

/ mb_stripos([대상 문자열], [조건 문자열], [시작위치], [인코딩]) 함수

/ mb_strripos([대상 문자열], [조건 문자열], [시작위치], [인코딩]) 함수

- mb_strpos()와 mb_stripos()는 대상 문자열을 앞부분부터 검색하여 조건 문자열이 몇 번째 위치에 있는지 찾습니다.

- mb_strrpos()와 mb_strripos()는 대상 문자열을 뒷부분부터 검색하여 조건 문자열이 몇 번째 위치에 있는지 찾습니다.

- 4개 함수 모두 한글과 같은 2byte짜리 문자가 포함된 문자열을 처리를 하기 위한 함수입니다.

 

$str = "한글 문자열을 검색(search) 혹은 비교하여 원하는 STRING 찾기";

$find = "R";

echo $str."<br/>";

echo "찾는 문자열 : ".$find."<br/>";

echo "mb_strpos : ".mb_strpos($str, $find, 0, "UTF-8")."<br/>";

echo "mb_strrpos : ".mb_strrpos($str, $find, 0, "UTF-8")."<br/>";

echo "mb_stripos : ".mb_stripos($str, $find, 0, "UTF-8")."<br/>";

echo "mb_strripos : ".mb_strripos($str, $find, 0, "UTF-8");

 


모바일 버전으로 보기