preg_replace所有<img>参数

Gil*_*ong 5 php image preg-replace html-parsing preg-match

我已经将WYSIWYG编辑器从旧版本升级到最新版本.图像尺寸的保存方式有所不同.旧版本的编辑器用于向图像标记添加宽度和高度参数.新编辑器创建样式参数,并将宽度和高度添加为样式.

我有一个preg_replace函数,我使用,以便我可以包围<a>标签<img>.

由于新编辑器在样式参数中保存宽度和高度,因此当前preg_replace不再起作用.

Preg替换:

$Content = preg_replace('#<img(.*?)src="([^"]*/)?(([^"/]*)\.[^"]*)"([^>]*?)>((?!</a>))#', '<a rel="group" class="fancybox fancy" title="" href="$2$3"><img$1src="$2$3"></a>', $Content);
Run Code Online (Sandbox Code Playgroud)

如果要知道,新编辑器会存储如下图像:

<img alt="" src="" style="" />
Run Code Online (Sandbox Code Playgroud)

而旧编辑器存储的图像如下:

<img src="" width="404" height="228" alt="" />
Run Code Online (Sandbox Code Playgroud)

我怎样才能重构我的preg_replace来复制完整的样式元素呢?向后兼容性也很酷.

谢谢你的时间 :)

pro*_*hid 8

试试这个:

$regex = '#<img([^>]*) src="([^"/]*/?[^".]*\.[^"]*)"([^>]*)>((?!</a>))#';
$replace = '<a rel="group" class="fancybox fancy" title="" href="$2"><img$1 src="$2"$3></a>';
$Content = preg_replace($regex, $replace, $Content);
Run Code Online (Sandbox Code Playgroud)


Ham*_*mZa 7

您可以更多地简化正则表达式,请注意,如果您希望输入正确,则可以使用此解决方案,否则只需使用html解析器:

$string = 'Some text <img alt="bar" title="foo" src="http://example.com/example.jpg" style="width:200px;height:400px;" /> Some text';

$new_string = preg_replace('#<img.+?src="([^"]*)".*?/?>#i', '<a href="$1">$0</a>', $string);
var_dump($new_string);
Run Code Online (Sandbox Code Playgroud)

说明:

  • <img : 比赛 <img
  • .+? :匹配任何一次或多次(ungreedy)
  • src=" : 比赛 src="
  • ([^"]*):匹配除"零次或多次之外的任何内容并对其进行分组
  • ".*?/?>:匹配",然后任何东西,直到/>>
  • i 修饰符:匹配大小写不敏感

您可能想要使用<img.+?src\s*=\s*"([^"]*)".*?/?>,您永远不会知道可能之前和之后都有空格=.

在线演示