用于复杂 html div 的正则表达式模式



任何想法这个正则表达式可能有什么问题 - 它似乎没有找到任何东西:

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。 就这么简单。

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

当我$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;
}

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

你应该使用domparser来获取"正确"div的内容。

想象一下,里面会有一个"div",或者div iteself可能是嵌套的:

  <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>

显然,这两种情况都不是您想要的。

最新更新