2012-07-17 129 views
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); 
+0

“*我想删除并替换其他东西。”“那是什么?你想要取代什么?请更具体地添加更多描述。 – Lion 2012-07-17 10:23:22

+0

@Lion我想替换一些其他的字符串。 – sammyukavi 2012-07-17 10:24:18

回答

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>,所以如果你有多个,你需要小心 - 正则表达式不支持这种'平衡'。

+0

@ Jay ..你的回答不起作用。 – sammyukavi 2012-07-17 10:30:59

+0

你在尝试哪一个?我已经测试了两个,他们的工作。你可以尝试第二个吗? – Jay 2012-07-17 22:44:59