如何替换方括号中的文本以进行数据库更改?

时间:2019-02-15 16:01:38

标签: php mysql

我们正在将画廊软件从Shareprints更改为foogallery,并需要更改其在博客文章中使用的ID。帖子内容现在具有以下简短代码:

  

[shareprints gallery_id =“ 14629” gallerytype = 0,依此类推]

我们需要将其更改为:

  

[foogallery gallery_id =“ 14629”]

因此,我需要更改画廊的名称,然后除去方括号中的其余文本,而不更改方括号之外的文本。

反正使用MySQL进行此操作还是有人对如何执行此操作有其他建议?

谢谢

2 个答案:

答案 0 :(得分:1)

最简单的方法就是编写脚本并更新所有内容。除非您有数百万的条目,否则这将是更简单的方法。只需与MYSQL连接,将所有行放入数组中,然后循环并在每次迭代时进行更新。

<?php
// Get all results in mysql sample data underneath
$input_lines = array(
    array(
        "id" => 1, 
        "line"=>'[shareprints gallery_id="14629" gallerytype = 0, etc]'
    )
);
// Loop each data 
foreach($input_lines as $l) {
    // Replace with new format
    preg_match_all('/\[[a-zA-Z]*\ ([^\ ]*)[^]]*/', $l['line'], $output_array);
    $input_lines = "[testname ". $output_array[1][0]."]"; // Change with new name here
    // var_dump($input_lines);
    // Update mysql with ID (l['id'] here)
}
?>

答案 1 :(得分:0)

它所支持的内容在某种程度上取决于您的数据库服务器,但这是不使用数据库的另一种选择:

if(marker.category == 'supported-offices'){
    marker.setZIndex(google.maps.Marker.MAX_ZINDEX - 1);
} else {
    marker.setZIndex(google.maps.Marker.MAX_ZINDEX + 1);
}

需要小心,不要使正则表达式过于贪婪,这就是为什么使用> SELECT REGEXP_REPLACE('my text before [shareprints some_othertype gallery_id="14629" gallerytype = 0, etc] my text [shareprints some_othertype gallery_id="1" gallerytype = 0, etc] my text after', '\\[shareprints [^\\]]*gallery_id="([0-9]+)"[^\\]]*\\]', '\[foogallery gallery_id="\\1"]'); +--------------------------------------------------------------------------------------------------+ | REGEXP_REPLACE(...) | +--------------------------------------------------------------------------------------------------+ | my text before [foogallery gallery_id="14629"] my text [foogallery gallery_id="1"] my text after | +--------------------------------------------------------------------------------------------------+ (而不是[^\\]]*)来捕获标记内(而不是外部)不需要的任何内容的原因。向后引用(括号)用于应传送的内容,然后在替换模式中使用相应的\ N(数字为N)。

然后,当您对正则表达式满意时,就可以使用

.*

..或类似内容,以使数据库繁忙一段时间;)