正则表达式从列中提取数据并将其放入另一列

时间:2014-06-27 22:13:35

标签: php mysql regex preg-match

我有一个列表很少的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);

但似乎没有任何效果。

任何简单易用的东西?

2 个答案:

答案 0 :(得分:0)

[]表示字符集,而不是字符序列。

$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)

答案 1 :(得分:0)

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

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

<强>解释

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