preg_split()
함수의 정의 및 사용법
preg_split()
함수는
문자열을 주어진 정규 표현식 패턴을 기준으로 나누어 배열로 변환하는 함수입니다.
이 함수는 특히 정규식을 활용한 문자열 분리, URL 분석 등의 작업에서 유용하게 사용됩니다.
/* 주어진 문자열에서 정규식으로 숫자와 문자를 분리하는 예시 */
$string = 'Hello123';
$parts_string = preg_split('/(?<=\D)(?=\d)|(?<=\d)(?=\D)/', $string); // 숫자와 문자를 분리
print_r($parts_string);
/* 출력:
Array (
[0] => Hello
[1] => 123
)
*/
echo '문자 : ' . $parts_string[0]; // 출력: '문자 : Hello';
echo '슷자 : ' . $parts_string[1]; // 출력: '슷자 : 123';
/* URL에서 프로토콜 종류를 분리하는 간단한 예시 */
$url = "https://www.example.com/path/to/resource";
$parts_url = preg_split('#://#', $url);
print_r($parts_url);
/* 출력:
Array (
[0] => https
[1] => www.example.com/path/to/resource
)
*/
echo '프로토콜의 종류: ' . $parts_url[0]; // 출력: '프로토콜의 종류: https'
한 번 더 확인하세요!
정규 표현식 패턴의 강력한 기능이 필요 없이 단순한 문자열을 기준으로 주어진 문자열을 분리한다면 explode()
함수나 str_split()
함수를 사용하는 것이 간단하고 성능도 더 빠릅니다.
preg_split()
함수의 형식은 다음과 같습니다.
구문
preg_split(
string $pattern,
string $subject,
int $limit = -1,
int $flags = 0
): array|false
/* preg_split(
정규식 패턴
분리할 대상이 되는 문자열[,
최대로 분할될 수 있는 부분의 수[,
추가적인 설정을 지정하는 플래그]]
);
*/
매개변수
$pattern |
필수. 분리할 때 사용할 정규 표현식 패턴입니다. |
---|---|
$subject |
필수. 분리할 대상 문자열입니다. |
$limit |
옵션. 최대로 분할될 수 있는 부분의 수를 나타냅니다. 기본값은 -1 로, 제한이 없음을 의미합니다. |
$flags |
옵션. 정규식 매칭에 대한 추가적인 옵션을 제어합니다. 기본값은 0 입니다.
| 비트 연산자와 결합할 수 있습니다.
|
반환 값
문자열을 주어진 정규 표현식 패턴을 기준으로 나누어 배열로 변환하여 반환합니다.
실패할 경우 false
를 반환합니다.
매개변수 $flags
에 따른 반환 값 예시
PREG_SPLIT_NO_EMPTY
빈 문자열을 결과로 포함하지 않습니다. 이 플래그를 사용하면 빈 문자열이 있는 경우 해당 결과가 배열에 포함되지 않습니다.
PREG_SPLIT_NO_EMPTY
플래그 사용하기
$str = 'This,is,a,,string';
/* 주어진 문자열을 쉼표(,)로 구분하고 빈 문자열을 결과로 포함합니다. */
$parts = preg_split('/,/', $str);
print_r($parts);
/* 출력:
Array (
[0] => This
[1] => is
[2] => a
[3] =>
[4] => string
)
*/
/* 주어진 문자열을 쉼표(,)로 구분하고 빈 문자열을 결과로 포함하지 않습니다. */
$no_empty_parts = preg_split('/,/', $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($no_empty_parts);
/* 출력:
Array (
[0] => This
[1] => is
[2] => a
[3] => string
)
*/
PREG_SPLIT_DELIM_CAPTURE
이 플래그를 사용하면 분할하는 구분자가 괄호()
로 묶인 표현식이면 구분자도 결과에 포함합니다.
PREG_SPLIT_DELIM_CAPTURE
플래그 사용하기
$str = 'This,is,a,,string';
/* 주어진 문자열을 쉼표(,)로 구분하고 쉼표(,)는 결과에 포함합니다. */
$with_comma_parts = preg_split('/(,)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
print_r($with_comma_parts);
/* 출력:
Array (
[0] => This
[1] => ,
[2] => is
[3] => ,
[4] => a
[5] => ,
[6] =>
[7] => ,
[8] => string
)
*/
PREG_SPLIT_OFFSET_CAPTURE
결과 배열에 각 요소의 시작 위치도 포함합니다. 이 플래그를 사용하면 결과 배열의 각 요소는 (문자열, 시작 위치) 쌍으로 구성됩니다.
PREG_SPLIT_OFFSET_CAPTURE
플래그 사용하기
$str = 'This,is,a,,string';
/* 주어진 문자열을 쉼표(,)로 구분하고
결과 배열의 각 요소는 (문자열, 시작 위치) 쌍으로 구성됩니다. */
$with_offset_parts = preg_split('/(,)/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r($with_offset_parts);
/* 출력:
Array (
[0] => Array (
[0] => This
[1] => 0
)
[1] => Array (
[0] => is
[1] => 5
)
[2] => Array (
[0] => a
[1] => 8
)
[3] => Array (
[0] =>
[1] => 10
)
[4] => Array (
[0] => string
[1] => 11
)
)
*/
활용 예제
preg_split()
함수는 다음과 같은 경우에 사용하면 편리하거나 유용합니다.
CSV 파일 파싱
CSV(comma-separated values) 파일에서 데이터를 추출할 때 preg_split()
함수를 사용할 수 있습니다. 예를 들어, 다음과 같은 CSV 문자열이 있다고 가정해 봅시다.
$csv_data = "John,Doe,25\nJane,Smith,30\n";
이제 쉼표(,
)와 줄바꿈(\n
)을 기준으로 데이터를 분할할 수 있습니다.
$lines = preg_split('/\n/', $csv_data, -1, PREG_SPLIT_NO_EMPTY);
$csv_array = [];
foreach ($lines as $line) {
$csv_array[] = preg_split('/,/', $line, -1, PREG_SPLIT_NO_EMPTY);
}
print_r($csv_array);
/* 출력:
Array (
[0] => Array (
[0] => John
[1] => Doe
[2] => 25
)
[1] => Array (
[0] => Jane
[1] => Smith
[2] => 30
)
)
*/
URL 파싱
URL에서 프로토콜, 호스트, 경로 등을 추출할 때 preg_split()
함수를 사용하면 유용합니다.
$url = 'https://www.example.com/path/to/resource';
$url_parts = preg_split('#://|/#', $url, -1, PREG_SPLIT_NO_EMPTY);
print_r($url_parts);
/* 출력:
Array (
[0] => https
[1] => www.example.com
[2] => path
[3] => to
[4] => resource
)
*/
위의 코드 예제처럼 preg_split()
함수는 정규식을 사용하여 URL을 분할하는 데 유용할 수 있습니다. 예를 들어, 특정 패턴을 기준으로 URL을 세부 요소로 분할하려는 경우에 유용합니다.
참고로 인코딩된 쿼리 문자열을 디코딩하여 변수로 구문 분석하는데 사용하는 함수가 있습니다. parse_url()
함수입니다. 이 함수는 URL을 구성 요소별로 쉽게 분리하여 반환합니다. 이 방법은 URL에서 프로토콜, 호스트, 경로 등을 개별적으로 얻고 싶을 때 매우 편리합니다.
아래의 코드는 parse_url()
함수를 사용하여 URL을 구성 요소별로 분리하여 반환하는 간단한 예시입니다.
$url = 'https://www.example.com/path/to/resource?query=string&foo=bar';
// URL을 구성 요소별로 분리하여 반환
$url_components = parse_url($url);
// 결과 출력
print_r($url_components);
/* 출력:
Array (
[scheme] => https
[host] => www.example.com
[path] => /path/to/resource
[query] => query=string&foo=bar
)
*/
위의 두 URL 파싱 예제를 토대로 상황에 따라 URL 파싱은 적절한 방법을 선택하는 것이 중요하다는 것을 알 수 있습니다. 단순한 URL 파싱의 경우에는 parse_url()
함수를 사용하는 것이 더 바람직하고, 복잡한 분할이 필요한 경우에는 preg_split()
함수를 고려할 수 있습니다.