2014-01-12 3 views
0

Я утверждаю, что я не эксперт по регулярному выражению, но я пытаюсь создать код, основанный на некоторых примерах, найденных здесь. Мне нужно заменить строку <li> на строку <li class="ingredient"> в таблице WordPress. Это изменение, однако, должно выполняться только для текста между [ingredients title = XXXX] и [/ingredient].regex/php код для замены текста между двумя тегами

Я написал этот код 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(); 

?> 

ответ

0

Вы должны изменить захваченную группу:

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

PHP код:

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

Почему вниз голосование ?! – revo

Смежные вопросы