Published 2021. 7. 13. 21:17

정규표현식

해당 글은 PHP 기준으로 정리한 글 입니다.

정규표현식이란?

특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어

정규표현식 함수

Function Description
preg_match() 패턴이 문자열에서 발견되면 1을 반환, 그렇지 않으면 0을 반환
preg_match_all() 문자열에서 발견된 패턴의 개수를 반환
preg_replace() 패턴과 일치하는 문자열을 다른 문자열로 대체된 문자열을 반환


Modifiers

Modifier Description
i 대소문자 구분하지 않고 패턴 검사 수행
m 여러 줄 검색을 수행(문자열의 시작 또는 끝을 검색하는 패턴은 각 줄의 시작 또는 끝과 일치)
u UTF-8 인코딩

  • i

    $result = preg_match("/t/", "test");
    if ($result) {
        echo "Regex!!";
    }
    else {
        echo "No Regex!!";
    }
    Regex!!

    $result = preg_match("/t/", "TEST");
    if ($result) {
        echo "Regex!!";
    }
    else {
        echo "No Regex!!";
    }
    No Regex!!

    이처럼 소문자일 땐 정규표현식에 잘 걸리는 것을 확인할 수 있다.
    하지만 검사하고자하는 문자열이 대문자일 때는 걸리지 않는 모습이다.


    $result = preg_match("/t/i", "TEST");
    if ($result) {
        echo "Regex!!";
    }
    else {
        echo "No Regex!!";
    }
    Regex!!

    이처럼 Modifiers의 i를 사용 시 대소문자 구분하지 않고 검사를 할 수 있다.


  • m
    Modifies를 설정하지 않았을 때

    $str = "adsad\n1234";
    $result = preg_match("/^[0-9]+/", $str);
    
    if ($result){
        echo "<h1>숫자를 찾았습니다!!</h1>";
    }
    else {
        echo "<h1>숫자를 찾을 수 없습니다.</h1>";
    }
    숫자를 찾을 수 없습니다.

    Modifies를 설정했을 때

    $str = "adsad\n1234";
    $result = preg_match("/^[0-9]+/m", $str);
    
    if ($result){
        echo "<h1>숫자를 찾았습니다!!</h1>";
    }
    else {
        echo "<h1>숫자를 찾을 수 없습니다.</h1>";
    }
    숫자를 찾았습니다!!

    이처럼 Modifies를 설정하지 않았을 때 여러 줄의 문자열에서 숫자를 못 찾았지만, 설정 후에는 여러 줄의 문자열에서 숫자를 찾을 수 있었다.


Patterns

Expresstion Description
[abc] 대괄호 사이의 문자 찾기
[^abc] 대괄호 사이의 문자 없는 것을 찾기
[0-9] 0부터 9까지의 문자 찾기

Metacharacters

Metacharacter Description
. 줄바꿈 문자인 \n를 제외한 모든 문자와 매치
^ 문자열의 시작 부분과 일치하는 항목을 찾기
$ 문자열 끝에서 일치하는 항목을 찾기
\d 숫자 찾기
\s 공백 문자 찾기

Quantifiers

Quantifier Description
n+ 하나 이상의 n을 포함하는 모든 문자열과 일치
n* 0개 이상의 n을 포함하는 모든 문자열과 일치
n? 0 또는 1번의 n이 포함된 모든 문자열과 일치
n{x} n을 x번 이상 반복한 문자열과 일치
n{x,y} n을 x번 이상 y번 이하 반복한 문자열과 일치
n{x,} n을 x번 이상 반복한 문자열과 일치

Grouping

( )으로 특정 문자열을 그룹핑할 수 있다.
/ba(na){2}/i -> banana

복사했습니다!