정규표현식 질문

정규표현식 질문

QA

정규표현식 질문

본문

function get_same_keyword($word){
   $return_data = "";
   $sql = "select pp_word, count(*) as cnt from g5_popular where pp_word like '%$word%' group by pp_word order by cnt desc limit 20 ";
    $sql_result = sql_query($sql);
 
   //ul 및 li에 class추가해서 사용할 것  
    $return_data = "<b>연관 검색어 :    </b>";

    while($data = sql_fetch_array($sql_result)){
$post_key7 = $data[pp_word];
$string7 = $post_key7;
$patterns7 = '/[0-9]화/';
$replacements7 = '/E0[0-9]/g';
$keywords7 = preg_replace($patterns7, $replacements7, $string7);
$meta_keywords7 = $keywords7;
      $return_data .= "<a href='".G5_BBS_URL."/search.php?stx=".urlencode($meta_keywords7)."'>$meta_keywords7</a>    ";
    }
    $return_data .= "";

    return $return_data;
}

 

여기서 1화부터 20화까지 1화는 E01 로 2화는 E02 ~ 20화는 E20 으로 치환하고 싶은데요. 생각처럼 안되네요. $replacements7 = '/E0[0-9]/g'; 가 정규표현식으로 나오지 않고 /E0[0-9]/g 이 상태로 뿌리더라구요. 그리고 2화는 E02 이렇게 표현해야 하는데 방법이 생각이 안나고 있습니다. 정규표현식 고수님이 조금만 도와주시면 감사하겠습니다.

이 질문에 댓글 쓰기 :

답변 1

안녕하세요?

제가 정규표현식 고수와는 거리가 멀지만 답변이 달리지 않아서 댓글을 남겨요 ^^

1~20화를 E01~E20으로 변경하여 출력하고 싶으신거죠?

 

일단 사용하신 preg_replace() 함수를 이용하고,

덧붙여 if 문으로 자리수를 맞추는 방법으로 작성해보겠습니다.

 


<?php
$epi_list = array("1화", "2화", "3화", "4화", "5화", "6화", "7화", "8화", "9화", "10화", "11화");
foreach ($epi_list as $epi_kor) {
    $number = preg_replace('/[^0-9]/', '', $epi_kor); // 숫자가 아닌 것('화')를 지웁니다.
    if (intval($number) < 10) { // 1~9화의 앞에 '0'을 붙여줍니다.
       $number = '0'.$number;
    }
    $epi_eng = 'E'.$number; // 앞에 'E'를 붙여줍니다.
    echo $epi_eng.'<br>';
}
?>

 

실행결과는 다음과 같습니다.

 

E01
E02
E03
E04
E05
E06
E07
E08
E09
E10
E11

 

 

한편 preg_replace() 함수 대신 preg_match() 함수를 사용할 수 있으며,

str_pad()를 사용하면 if 문을 사용하지 않고 보다 쉽게 자리수를 맞출 수 있습니다 ^^

이를 사용한 아래의 코드도 똑같은 결과를 출력합니다.

 


<?php
$epi_list = array("1화", "2화", "3화", "4화", "5화", "6화", "7화", "8화", "9화", "10화", "11화");
foreach ($epi_list as $epi_kor) {
    preg_match('/[0-9]{1,2}/', $epi_kor, $match); // 숫자 한 글자 또는 두 글자를 찾아냅니다.
    echo 'E'.str_pad($match[0], "2", "0", STR_PAD_LEFT).'<br>'; // 길이 2가 되도록 좌측에 0을 채웁니다.
}
?>

 

이미 숙지하고 계시겠지만 preg_match() 함수와 관련해서 궁금한 점이 있으시다면 

PHP 공식문서를 참조하시면 도움이 되실 것 같네요 :)

http://php.net/manual/kr/function.preg-match.php

 

부족한 스크립트이지만 도움이 되셨으면 좋겠네요~

그럼 즐거운 크리스마스 되세요! ^-^

답변을 작성하시기 전에 로그인 해주세요.
전체 42
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT