用于替换两个标签之间的文本的正则表达式/ php代码

时间:2014-01-12 20:18:34

标签: php html regex wordpress replace

我声明我不是正则表达式专家,但我正在尝试根据此处的一些示例创建代码。我需要在WordPress表中用字符串<li>替换字符串<li class="ingredient">。但是,此更改只能针对[ingredients title = XXXX][/ingredient]之间的文字进行。

我编写了这个PHP代码,但它可以删除替换[ingredients[/ ingredients]

因为正如我所说他们在这个领域不是很专家,任何人都可以帮我改变代码来做我需要的事情吗?

这是我的PHP脚本:

<?php
$connection = mysql_connect("mysql.xxxxxxxxx","xxxxx","xxxxxxxx");
$db =  mysql_select_db ("xxxxxxx");

$sql = "SELECT ID,post_content FROM wp_7pchjn_posts";    

$result = mysql_query($sql);    

while ($row = mysql_fetch_assoc($result))
    {
    $id = $row['ID'];
    $search= $row['post_content'];

    if (strpos($search,'[ingredients') !== false) {

        $text = preg_replace_callback("/\[ingredients(.*?)\[\/ingredients\]/ism", function($match) {
          return str_replace("<li>", "<li class=\"ingredient\">", $match[1]);
        }, $search);

        $sql = "UPDATE yourtable set post_content='".$text."' where id='".$id."'";
        mysql_query($sql);
    }
}

mysql_close(); 

?>

1 个答案:

答案 0 :(得分:0)

您需要更改捕获的组:

(\[ingredients.*?\[\/ingredients\])/ism

PHP代码:

$text = preg_replace_callback("/(\[ingredients.*?\[\/ingredients\])/ism", function($match) {
          return str_replace("<li>", "<li class=\"ingredient\">", $match[1]);
        }, $search);