替换数组中的字符串

时间:2012-07-17 10:21:01

标签: php str-replace

我有一个长字符串,其中包含我想删除的样式标记,并替换为其他字符串。     但是我已经尝试了str_replace函数,但它失败了。知道我怎么能这样做吗?我的代码在这里。

$primaryNav = '<li id="menu-item-1178" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1178 sf-ul">
                <a href="http://mysite.com/join/" class="sf-with-ul">
                    <cufon class="cufon cufon-canvas" alt="Get " style="width: 30px; height: 15px; ">
                        <canvas width="45" height="16" style="width: 45px; height: 16px; top: -1px; left: -2px; "></canvas>
                        <cufontext>Get </cufontext>
                    </cufon>
                    <cufon class="cufon cufon-canvas" alt="in" style="width: 15px; height: 15px; ">
                        <canvas width="24" height="16" style="width: 24px; height: 16px; top: -1px; left: -2px; "></canvas>
                        <cufontext>in</cufontext>
                    </cufon>
                    <span class="sf-sub-indicator"><cufon class="cufon cufon-canvas" alt="»" style="width: 6px; height: 15px; "><canvas width="20" height="16" style="width: 20px; height: 16px; top: -1px; left: -2px; "></canvas><cufontext>»</cufontext></cufon></span></a>
                        <ul class="sub-menu" style="visibility: hidden; display: none; "> </ul>
                </li>';

$primaryNav = str_replace('<span class="sf-sub-indicator"><cufon class="cufon cufon-canvas" alt="»" style="width: 6px; height: 15px; "><canvas width="20" height="16" style="width: 20px; height: 16px; top: -1px; left: -2px; "></canvas><cufontext>»</cufontext></cufon></span>', ' It works!', $primaryNav);

1 个答案:

答案 0 :(得分:0)

您需要考虑代码之间的空格。这是正则表达式可能是一个不错的解决方案的一种情况:

$primaryNav = preg_replace('#<span class="sf-sub-indicator">\s*<cufon class="cufon cufon-canvas" alt="»" style="width: 6px; height: 15px; ">\s*<canvas width="20" height="16" style="width: 20px; height: 16px; top: -1px; left: -2px; ">\s*</canvas>\s*<cufontext>»</cufontext>\s*</cufon>\s*</span>#', 'It works!', $primaryNav);

#用于启动/结束正则表达式,因此您可以忽略它。 \s*表示尽可能多地匹配任意数量的空格。这将涵盖空格,制表符,换行符等。

请注意,如果您不需要那么多详细信息,您还可以使用正则表达式进行匹配:

$primaryNav = preg_replace('#<span class="sf-sub-indicator">.*?</span>#', 'It works!', $primaryNav);

请注意,最后一个将停止匹配第一个 </span>,所以如果你有多个,你需要小心 - 正则表达式不支持这种'平衡'。