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

1

你的正则表达式对我来说看起来是正确的,真的。

当我更改$replace1$replace, 以同意函数稍后的用法并删除 if 语句时,它似乎有效。那是:

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

似乎按预期工作。我猜测$replace1vs.$replace问题可能不在您执行的代码中(因为您没有检测到错误),所以您确定is_single()在您测试它的上下文中返回 true 吗?

于 2013-09-20T16:49:36.437 回答
0

您应该使用 domparser 来获取“正确” div 的内容。

想象里面会有一个“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 回答