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

タグ間のスペースを考慮する必要があります。これは、正規表現が適切な解決策である可能性がある 1 つのケースです。

$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 に答える