정규표현식 질문
본문
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 |
한편 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
부족한 스크립트이지만 도움이 되셨으면 좋겠네요~
그럼 즐거운 크리스마스 되세요! ^-^
!-->!-->