0

我有一个长字符串,其中包含一个样式标记,我想将其删除并替换为其他字符串。但是我尝试了 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);
4

1 回答 1

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>一个停止匹配,因此如果您有多个,则需要小心 - 正则表达式不支持这种“平衡”。

于 2012-07-17T10:24:13.760 回答