【问题标题】:replace all images in an XML file替换 XML 文件中的所有图像
【发布时间】:2014-12-18 08:20:47
【问题描述】:

我已经导入了我所有的 wordpress 内容,现在我想用占位符图像替换所有图像。我认为最明显的方法是搜索和替换所有图像。我尝试手动完成,但文件很大,让我重新思考。

这是 wordpress 导出的 XML 文件的示例:https://wpcom-themes.svn.automattic.com/demo/theme-unit-test-data.xml

我想用 placehold.it 网址 (http://placehold.it/) 替换所有图片网址

我正在使用 sublime 文本编辑器,是否有任何正则表达式可以搜索 XML 文件中的所有图像 url?我真的不太擅长正则表达式..

提前致谢!

【问题讨论】:

  • 您能否提供一个简短的预期输入/输出示例以及您尝试过的内容?
  • 您是要保留图片的 URL 以防万一,还是只想转储它们?
  • 不,我不想保留它们,我想全部替换

标签: xml regex wordpress replace


【解决方案1】:

用一些占位符文本替换所有图像src 属性的简单正则表达式是:

搜索:

<img (.*?)src=".*?"

替换为:

<img $1src="http://example.com"

如果你想使用占位符 URL,你可以这样做:

<img (.*?)src=".*?"(.*?)width="(\d+)" height="(\d+)"

替换为:

<img $1src="http://placehold.it/$3x$4"$2width="$3" height="$4"

解释:

  • .*? 表示 0 个或多个字符
  • \d+ 表示 1 个或多个数字
  • ()捕获括号的内容并保存到$1$2$3

  • &lt;img (.*?)src 捕获&lt;imgsrc 之间的任何字符并将它们保存在$1 中——因此,如果有类属性、ID 或类似的东西——它将被保存为$1.*? 也可以不匹配,所以$1 也可以为空。

  • width="(\d+)" 捕获提供图像宽度的数字,并将它们保存到 $3(因为它是该正则表达式中的第三组括号)。

【讨论】:

    【解决方案2】:

    正则表达式:

    (\<img\s+.*?src\s*=\s*)(?|"(.*?)"|\'(.*?)\')(.*?\/?\>)
    

    替换:

    $1"http://placehold.it/"$3
    

    如果您的编辑器支持正则表达式搜索和替换,则使用上面的,否则在 PHP 中:

    $string = preg_replace( '/(\<img\s+.*?src\s*=\s*)(?|"(.*?)"|\'(.*?)\')(.*?\/?\>)/is', '$1"http://placehold.it/"$3', $string );
    

    【讨论】:

      猜你喜欢
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 2010-11-24
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多