0

この正規表現の何が問題なのか考えてみてください - 何も見つからないようです:

function ad_content($content) {
    if (is_single()) {
    $find = '#<div id=\"attachment_(\d+)\" class=\"wp-caption aligncenter\" style=\"width: (\d+)px\">(.*?)</div>#s';
    $replace1 = '11111';
    $content = preg_replace($find,$replace,$content,1);
    }
    return $content;
}
add_filter ('the_content','ad_content');

私は次のような基本的なもので試しました

$find = '#attachment#';

そしてそれはうまくいきます。

上記の正規表現を使用すると、何も置き換えられず、エラーも発生しません。したがって、何も見つからないだけだと思います。これが見つけるべきものは次のとおりです。

<div id="attachment_167" class="wp-caption aligncenter" style="width: 600px"><a href="http://www.url.com"><img class="size-full wp-image-167" alt="text" src="http://www.url.com" width="600" height="776" /></a><p class="wp-caption-text">text &#8211; text</p></div>

この正規表現バリデーターで試してみましたが、一致します。

答え:

私は最終的にそれを理解したと思います - the_content フックは、私の div には適用されないようです。そのような単純な。

4

2 に答える 2

0

「正しい」divのコンテンツを取得するには、domparserを使用する必要があります。

内部に「div」があるか、div 自体がネストされていると想像してください。

  <div> 
    Something else
      <div id="thisIwantToMatch"> Foo <div>Bar</div> Baz </div>
    Again something else
  </div>

End-Tag には属性が含まれていないため、正規表現を使用して正しいものを見つけるのはほとんど不可能です。「怠惰な」正規表現を使用すると一致<div id="thisIwantToMatch"> Foo <div>Bar</div>しますが、貪欲な正規表現は一致します<div id="thisIwantToMatch"> Foo <div>Bar</div> Baz </div>Again something else</div>

明らかに、両方のケースはあなたが望むものではありません。

于 2013-09-20T16:53:48.183 に答える