【问题标题】:Regular expression to extract data from a colum and put it in another column正则表达式从列中提取数据并将其放入另一列
【发布时间】:2014-06-27 22:13:34
【问题描述】:

我有一个包含几列的 MySQL 表。

第 1 列包含 html 代码:

<p style="xxx"><img src="path/to/file.png(or jpg)"></p>

我想将src (path/file.xxx) 提取到第 2 列,然后从第 1 列中删除整个 P 标记。

我尝试了一些技术,例如

preg_match('/\< *[img][^\>]*[src] *= *[\"\']{0,1}([^\"\']*)/i', $row->image, $matches);

但似乎没有任何效果。

有什么简单易用的吗?

【问题讨论】:

  • 您不想在imgsrc 周围使用[...] 块。 &lt; *img[^\&gt;]*src *= *["']?([^"'&gt;]+)["'][^&gt;]*&gt; 似乎匹配得很好:regex101.com/r/qC9pD7

标签: php mysql regex preg-match


【解决方案1】:

[] 代表一个字符集,而不是一个字符序列。

$html = '<p style="xxx"><img src="path/to/file.png(or jpg)"></p>';
preg_match('/<img src="([^"]*)">/', $html, $m);
echo $m[0] . "\n";
echo $m[1] . "\n";

输出:

<img src="path/to/file.png(or jpg)">
path/to/file.png(or jpg)

【讨论】:

    【解决方案2】:

    关于使用正则表达式处理 html 的所有免责声明,您可以使用简单的preg_replace

    $replaced = preg_replace('~<p[^>]*><img src="([^"]+)"></p>~', '$1', $yourstring);
    

    说明

    • &lt;p 匹配标签的开头
    • [^&gt;]* 匹配任何不是 &gt; 的字符
    • &gt;&lt;img src=" 匹配文字字符
    • ([^"]+) 中的括号将任何不是 " 的字符捕获到第 1 组(这是您想要的)
    • "&gt;&lt;/p&gt; 将字符匹配到第 1 组
    • 我们将整个字符串替换为$1,这是对第1组捕获的内容的反向引用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多