【问题标题】:Regex search-and-replace in database tables数据库表中的正则表达式搜索和替换
【发布时间】:2014-02-02 02:32:04
【问题描述】:

我正在使用 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 替换的代码。但是如果我可以使用正则表达式会更简单、更简洁。

附:我的页面实际上将包含几个类似的 div/标题 - 房屋、生态、环境等。我希望能够在每个部分的末尾插入内容或功能 - 但在某些情况下,在结束 div 标记之前。

【问题讨论】:

    标签: php mysql regex


    【解决方案1】:

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

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

    然后替换为

    [INSERT SOMETHING HERE]\n</div>
    

    这将匹配 Homes div 之前的最后一个 &lt;/div&gt;,与换行符或空格的数量无关。

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

    正则表达式解释:

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

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

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

    中的&lt;\div&gt;匹配
    </div><div id="Homes"><h2>Homes</h2><div id="Homes">
    

    【讨论】:

      猜你喜欢
      • 2013-06-14
      • 2012-07-02
      • 2018-05-25
      • 2010-11-25
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多