테스트 사이트 - 개발 중인 베타 버전입니다

정규식 치환 질문드립니다. 채택완료

무와보 5년 전 조회 3,030

정규식은 너무 어렵네요.

preg_replace를 이용하여 치환하는 문제와 특정 단어 뒤를 뽑아오는 문제에서 막히고 있습니다.

 

[code-html] [code-css] [code-js] 같은 내용이 있다면

 

1. code- 뒤에 오는 단어(위에서는 html,css,js)를 뽑아오고 싶습니다.

2. [code-***] 부분을 치환하고 싶습니다. ***값이 상황에 따라 달라지기 때문에 preg_replace로 정규식 치환을 해야 할 것 같은데 정규식 이해력이 낮아 해결이 안되고 있습니다.

 

고수님들의 도움 부탁드립니다.

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
5년 전

심심해서 풀어봤습니다.

https://paiza.io/projects/e/Kdw3C1q39Xo5tpbxtz4S_Q?theme=twilight

 

</p>

<p>

function replace_string($matches) {

    //여기에 바꿀 문자를 넣습니다.   

    print_r($matches);

    

    if($matches[1] == "html") {

        return "[code-new_html]";

    } else if($matches[1] == "css") {

        return "[code-new_css]";

    } else if($matches[1] == "js") {

        return "[code-new_js]";

    } else {

        return $matches[0];

    }

    return "1";

    //return $matches[1].($matches[2]."new");

    

}</p>

<p>$string = "[code-html] [code-css] [code-js] ";</p>

<p>preg_match_all("/\[code-([a-zA-Z0-9]+)\]/", $string, $matches);</p>

<p>print_r($matches);</p>

<p>

$new_string = preg_replace_callback("/\[code-([a-zA-Z0-9]+)\]/", 'replace_string', $string);

echo "old_string : $string 
\n";

echo "new_string : $new_string 
\n";

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

무와보
5년 전
code-*** 에서 ***를 if문이 아니라 어떤 값이든 자동으로 변환되게 하려는게 목적이었는데
목적과는 다르지만 솔그루님의 답변이 큰 도움이 되었습니다. ^^
원래 의도는
[code-html] 를 <code class="html">로
[code-css] 를 <code class="css">로
...
[code-***] 를 <code class="***">로 바꾸는 것이었습니다 ^^

댓글을 작성하려면 로그인이 필요합니다.

5년 전
replace_string 함수를 아래와 같이 바꾸시면 됩니다.

function replace_string($matches) {
    return "<code class=\"".$matches[1]."\">";
}

로 바꾸시면 됩니다.

 

preg_replace는 좀더 어렵게 코드를 만들어야 해서 예제로 사용하지 않았습니다.

 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

무와보
5년 전
답변 감사합니다. 안그래도 preg_replace는 $값으로 바꾸면 되려나 막연하게 생각하고 있었는데 위와 같은 방법으로 처리하는게 눈에 쉽게 들어오네요.

댓글을 작성하려면 로그인이 필요합니다.

5년 전

논리적으로 이해하기 쉬우라고 if else 를 써둔거에요^^

동일한 패턴으로 replace 하신다면, 한줄로 써도 되고, 배열값으로 replace 하셔도 됩니다.

도움 되셨다니, 기쁘네요.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

무와보
5년 전
배열값으로 replace는 이해를 한 것 같은데 동일한 패턴으로 replace한다는 말은 제 수준에 이해가 안되네요. 정규식 무식자라서 죄송합니다 ^^
혹시 이렇게 하는게 적용이 된다는 말씀이신가요?
preg_replace("/\[code-([a-zA-Z0-9]+)\]/", "<pre><code class=\"([a-zA-Z0-9]+)\]\">", $content);

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인