正则表达式在数据库表中搜索和替换

时间:2014-02-02 02:32:05

标签: php mysql regex

我正在使用PHP和MySQL。想象一下所有文章都包含以下HTML代码:

</div>
<div id="Homes">
  <h2>Homes</h2>

但是,空白可能存在差异,如下所示:

</div>
[WHITESPACE]
<div id="Homes"><h2>Homes</h2>

我想知道是否可以使用正则表达式在上面示例中的第一个div结束标记之前插入一些内容,如下所示:

[INSERT SOMETHING HERE]
</div>
<div id="Homes">
  <h2>Homes</h2

正则表达式将忽略空格并将目标指向div#Homes之前的最后一个div结束标记。

如果您不知道可以执行此操作的确切正则表达式,那很好。我只需要知道它是否可以完成(以及是否可以使用phpMyAdmin或者我是否需要一个不同的程序)。

如果无法完成,那么我将不得不插入一些可以用str_replace替换的代码。但如果我能使用正则表达式,那将会更简单,更清晰。

P.S。我的页面实际上将包括几个类似的div /标题 - Homes,Ecology,Environment等。我希望能够在每个部分的末尾插入内容或功能 - 但在某些情况下在结束div标签之前。

1 个答案:

答案 0 :(得分:0)

您可以使用以下正则表达式:

</div>(?=[\s\n\r]+<div id="Homes">)

然后用

替换
[INSERT SOMETHING HERE]\n</div>

这将匹配Homes div之前的最后</div>,而不管换行符或空格的数量。

</div>
<div id="Homes">
  <h2>Homes</h2>

正则表达式的解释:

  • </div></div>
  • 相匹配
  • ?=是正向查找。请注意,这是非捕获,并且它不会成为匹配的一部分
  • [\s\n\r]匹配空格或换行符

如果您还希望在一行中所有内容都匹配,那么您只需将+替换为*

</div>(?=[\s\n\r]*<div id="Homes">)

匹配

中的<\div>
</div><div id="Homes"><h2>Homes</h2><div id="Homes">