我有一个长字符串,其中包含我想删除的样式标记,并替换为其他字符串。 但是我已经尝试了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);
答案 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>
,所以如果你有多个,你需要小心 - 正则表达式不支持这种'平衡'。