문자열 치환 질문 입니다。 채택완료

@@는 제목
#$ 문딘 시작
$# 문단 종료
^^색깔 강조 -보라색

php 로 어떻게 치환해야 하는건가요¿

$text = str_replace("@", "<p class='s-tit'>", $text); 게 하니까 @ 。。 @ 로 감싸고 있어서

맨 앞 맨 뒤를 어떻게 <p class='s-tit'> 。。 </p> 로 치환해야 하는지요

@ 내 아이의 활동성 기질 특성 @
6-10 중에 1~ 2개를 체크하셨다면 지금 아이는 기질 성향 중 활동이 많은 아이로 보여집니다.
6-10 중에 3개~5개를 체크하셨다면 지금 아이는 기질 성향 중 활동이 매우 많은 아이로 보여집니다.

@기질 정의@
 

아이를 키우실 때 부모님들이 정말 답답해하고 답을 찾을 수 없어 힘들어하시는 부분이 바로 기질과 관련된 부분입니다. 기질은 이성적인 판단과 논리적인 생각으로 만들어지는 것이 아니라 아이가 타고난 생물학적 특성입니다. 특히 오감이 너무 예민하게 발달 된 경우, 외부에서 새로운 자극이 들어올 때 이것을 무시하지 못하다 보니 순한 아이들에 비해 자극을 크게 받아들입니다.

답변 2개

채택된 답변
+20 포인트

다음 코드가 도움이 될지 모르겠습니다.

Copy
<?php
function parse_test($str, $opts) {
    $replaced = preg_replace_callback('/(?:@|\^\^|#\$)(.*?)(?:@|\^\^|\$#)/', function ($matches) use ($opts) {
        $tmp = '';

 

        if (substr($matches[0], 0, 2) == '^^') {
            $tmp = str_replace('::REPLACEMENT::', $matches[1], $opts['emphasis']);
        } else if (substr($matches[0], 0, 2) == '#$') {
            $tmp = str_replace('::REPLACEMENT::', $matches[1], $opts['sentence']);
        } else if (substr($matches[0], 0, 1) == '@') {
            $tmp = str_replace('::REPLACEMENT::', $matches[1], $opts['title']);
        }

 

        return $tmp;
    }, $str);

 

    return $replaced;
}
?>

 

<style>
.s-tit {
    font-size: 2em;
    font-weight: bold;
}
.s-cont {
    border: 0.1em dotted gray;
}
.emphasis {
    color: purple;
    font-weight: bold;
}
</style>

 

<?php

$str1 = <<<HEREDOC
@ 내 아이의 활동성 기질 특성 @
6-10 중에 1~ 2개를 체크하셨다면 지금 아이는 기질 성향 중 활동이 많은 아이로 보여집니다.
6-10 중에 3개~5개를 체크하셨다면 지금 아이는 기질 성향 중 활동이 매우 많은 아이로 보여집니다.

 

@기질 정의@
 

아이를 키우실 때 부모님들이 정말 답답해하고 답을 찾을 수 없어 힘들어하시는 부분이 바로 기질과 관련된 부분입니다. 기질은 이성적인 판단과 논리적인 생각으로 만들어지는 것이 아니라 아이가 타고난 ^^생물^^학적 특성입니다. #\$특히 오감이 너무 예민하게 발달 된 경우,\$# 외부에서 새로운 자극이 들어올 때 이것을 무시하지 못하다 보니 ^^순한^^ 아이들에 비해 자극을 크게 받아들입니다.
HEREDOC;

 

$parse_test_opts = [
    'title' => '<p class="s-tit">::REPLACEMENT::</p>', 
    'sentence' => '<p class="s-cont">::REPLACEMENT::</p>', 
    'emphasis' => '<span class="emphasis">::REPLACEMENT::</span>'
];

 

echo parse_test($str1, $parse_test_opts);
?>
로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

답변 너무 감사한데.. 먼가 잘 안되서요..

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

정규식으로 explode 로 자르고 그걸 배열로 추출한 뒤에 array_unique()로 순서

$xx = "@123213123123@"; 경우

$cut_xx = explode("@", $xx); 를 하게 되면 결과는

Array ( [0] => [1] => 1234 [2] => ) 로 나오게 됩니다.

이걸 치환하면 되지 않을까요?

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

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

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

로그인
🐛 버그신고