在php中为这个正则表达式模式添加负面回顾

时间:2014-06-18 20:14:08

标签: php regex wordpress regex-lookarounds

我花了一整天的时间试图弄清楚如何让这段代码只影响它运行的第一个实例。最后,我了解了一个消极的回顾并试图实现它。

我已经尝试了所有可能的安排,当然,除了正确的安排。我发现了regex101,这真的很酷,但最终没有帮我找到解决方案。

$content = preg_replace('/<img[^>]+./','', get_the_content_with_format());

这将在wordpress中用于去除页面上的第一个图像(将其移到书面内容之上),但保留其余内容,以便在帖子描述中使用图像。

请对我好。这是我的第一个问题,我真的不是程序员。

更新:因为l'L&#39;我问,这是相关代码的整个部分。

<?php
//this will remove the images from the content editor
// it will not remove links from images, so if an image has a link, you will end up with an empty line.

$content = preg_replace('/<img[^>]+./','', get_the_content_with_format());

//this IF statement checks if $content has any value left after the images were removed
// If so, it will echo the div below it.. if not will won't do anything.

if($content != ""):?>

        <div class="portfolio-box">
        <?php echo do_shortcode( $content ) ?>
        </div>

<?php endif; ?>

我已尝试过这里提供的两种解决方案,但无论出于何种原因,它们都无法正常工作。

而且,顺便说一下,非常感谢你们的帮助。

2 个答案:

答案 0 :(得分:0)

您可以将其锚定在字符串的开头(使用^),将所有内容捕获到第一个图像(使用(.*?)),然后将所有内容替换为图像前的内容:

$content = preg_replace('/^(.*?)<img[^>]+/s','$1', get_the_content_with_format());

注意我还添加了修饰符s,以便点(.)匹配换行符。

答案 1 :(得分:0)

如果您只想替换正则表达式匹配的第一个出现,只需添加“1”作为第四个参数,这表示只会替换一个匹配项。 见http://php.net/manual/de/function.preg-replace.php

在您的示例中,这看起来像:

$content = preg_replace('/<img[^>]+./','', get_the_content_with_format(), 1);