我们正在将画廊软件从Shareprints更改为foogallery,并需要更改其在博客文章中使用的ID。帖子内容现在具有以下简短代码:
[shareprints gallery_id =“ 14629” gallerytype = 0,依此类推]
我们需要将其更改为:
[foogallery gallery_id =“ 14629”]
因此,我需要更改画廊的名称,然后除去方括号中的其余文本,而不更改方括号之外的文本。
反正使用MySQL进行此操作还是有人对如何执行此操作有其他建议?
谢谢
答案 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)。
然后,当您对正则表达式满意时,就可以使用
.*
..或类似内容,以使数据库繁忙一段时间;)