【问题标题】:Removing first non-empty <p> tag from a row从一行中删除第一个非空 <p> 标记
【发布时间】:2014-06-28 13:26:11
【问题描述】:

我有几千行包含 HTML 数据

<p>non useful data</p>
<p>useful data</p>

我要删除第一个 p 标签

<p >non empty</p >

只更新行

<p>useful data</p>

我试过了

$request = mysql_query("select * from content limit 50") or die('Error :'.$request.' '.mysql_error());
while($r=mysql_fetch_array($request)) {
    $id = $r[id];   
    $text = $r[text];   
    preg_match('@<p>.*?</p>(.*)@', $text, $matches);    
    $srcfinal = $matches[1];  
    $srcrestant =$matches[0];    
    echo"$srcfinal<br />";
  }

我可以正确提取无用数据 ($srcfinal),但找不到任何东西来打印所需数据(然后用它更新行)。

请使用任何轻量级代码?

【问题讨论】:

    标签: php mysql regex


    【解决方案1】:

    听起来您想在 PHP 中检索行,然后将第一个 &lt;p&gt;...&lt;/p&gt; 标记替换为空字符串。这样就可以了(\R* 还会删除段落后的所有换行符):

    $replaced = preg_replace('%^<p>.*?</p>\R*%', '', $yourstring);
    

    我也会考虑直接在数据库中使用UPDATE... SET...

    • LOCATE() 会找到你的第一个 &lt;/p&gt;
    • RIGHT() 会给你右边的字符。

    【讨论】:

      【解决方案2】:

      为什么不使用常规的 XML/HTML - 解析器?删除第一个&lt;p&gt; 标签没什么大不了的。

      假设您的结果可能不包含有效的 HTML,您有多种选择来实现您的目标 - 要有创意 :)

      这些只是没有 Regex 的选项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-09
        • 1970-01-01
        • 2016-08-07
        相关资源
        最近更新 更多