정규식 치환 질문드립니다.
본문
정규식은 너무 어렵네요.
preg_replace를 이용하여 치환하는 문제와 특정 단어 뒤를 뽑아오는 문제에서 막히고 있습니다.
[code-html] [code-css] [code-js] 같은 내용이 있다면
1. code- 뒤에 오는 단어(위에서는 html,css,js)를 뽑아오고 싶습니다.
2. [code-***] 부분을 치환하고 싶습니다. ***값이 상황에 따라 달라지기 때문에 preg_replace로 정규식 치환을 해야 할 것 같은데 정규식 이해력이 낮아 해결이 안되고 있습니다.
고수님들의 도움 부탁드립니다.
답변 3
심심해서 풀어봤습니다.
https://paiza.io/projects/e/Kdw3C1q39Xo5tpbxtz4S_Q?theme=twilight
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");
}
$string = "[code-html] [code-css] [code-js] ";
preg_match_all("/\[code-([a-zA-Z0-9]+)\]/", $string, $matches);
print_r($matches);
$new_string = preg_replace_callback("/\[code-([a-zA-Z0-9]+)\]/", 'replace_string', $string);
echo "old_string : $string <br>\n";
echo "new_string : $new_string <br>\n";
논리적으로 이해하기 쉬우라고 if else 를 써둔거에요^^
동일한 패턴으로 replace 하신다면, 한줄로 써도 되고, 배열값으로 replace 하셔도 됩니다.
도움 되셨다니, 기쁘네요.
replace_string 함수를 아래와 같이 바꾸시면 됩니다. function replace_string($matches) { return "<code class=\"".$matches[1]."\">"; }
로 바꾸시면 됩니다.
preg_replace는 좀더 어렵게 코드를 만들어야 해서 예제로 사용하지 않았습니다.
답변을 작성하시기 전에 로그인 해주세요.