채택완료

정규식 문의 드립니다.

2017-10-28 (토) 13:53:03 2,713

안녕하세요.

<item name="color">#000000</item>

을

<item name="color">#FFFFFF</item>

으로 변경하는 php 정규식은 어떻게 되는지 도움을 받고 싶습니다.

|

답변 2개 / 댓글 1개

채택된 답변
+20 포인트

다음과 같은 것을 원하시는지는 모르겠지만

참조하시죠.

$str = '<item name="color">#000000</item>';
$pattern = "#<item name=\"color\">(?P<color>[^<]+)<\/item>#i";

preg_match($pattern, $str, $matches);

if($matches['color'] == '#000000' || $matches['color'] == '#000'){
    $s = array("#000000", "#000");
    $r = array("#FFFFFF", "#FFF");
    $str = str_replace($s, $r, $str);
    echo $str;
}

정규식으로는

Copy
$content = '<item name="color">#000000</item>123<item name="color">#000000</item>';

$content = preg_replace('!<item name="color">#000000</item>!', '<item name="color">#FFFFFF</item>', $content);

이지만 별다른 규칙이 필요없다면 굳이 성능이 떨어지는 정규식을 사용할 필요는 없습니다.

Copy
$content = '<item name="color">#000000</item>123<item name="color">#000000</item>';
$content = str_replace('<item name="color">#000000</item>', '<item name="color">#FFFFFF</item>', $content);

답변에 대한 댓글 1개

2017-10-28 (토) 14:19:50
컬러 색상값을 읽고,
컬러 값에 상응하는 새로운 값을 도출하여
변경하려고 합니다.

하여, 원본값 color 읽고, 그 이후 해당 값을 치환하고 싶습니다.
하여 str_replace 가 아닌 정규식이 필요로 합니다.

빠른 답변 감사드립니다.

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