如何使用正则表达式将图像名称替换为img标签?

时间:2012-12-12 20:46:47

标签: php regex

说我需要更换以下任何一项:

{{image.jpg}}{{any-othEr_Fil3.JPG}}

要:

分别使用PHP和正则表达式

<img src="image.jpg" alt="" /><img src="any-othEr_Fil3.JPG" alt="" />

该计划是什么?

我一直在努力,但没有成功。

3 个答案:

答案 0 :(得分:2)

要匹配的正则表达式(我假设文件名不包含}个字符 - 如果它包含,则必须有一个转义它的方案,我不知道你提供的信息):

/{{([^}]*)}}/

要替换的字符串:

'<img src="$1" alt="" />'

答案 1 :(得分:1)

快速修复

要匹配{{}}之间的字符,我们应该使用(.+?).表示匹配任何字符,包括空格。由于file name.jpg是有效的文件名(如果您不希望用.+?替换\S+?),我允许这样做。 +表示匹配需要有多个字符才能发生。 ?表示正则表达式将尝试匹配尽可能少的字符。因此,如果我们使用正则表达式{{(.+?)}},则捕获的字符将位于最近的{{}}集之间。例如:

$string = '{{image.jpg}} or {{any-othEr_Fil3.JPG}}';
echo preg_replace_callback('/{{(.+?)}}/', function($matches) {
    return sprintf('<img src="%s" alt="" />', $matches[1]);
}, $string);

将回显

<img src="image.jpg" alt="" /> or <img src="any-othEr_Fil3.JPG" alt="" />

获得幻想

正则表达式/{{\s*(.+?\.(?:jpg|png|gif|jpeg))\s*}}/i将匹配{{}}之间的任何图像文件名(使用jpg,png,gif或jpeg文件扩展名),以便在大括号和文件名。例如:

$string = "{{image.jpg}} or {{ any-othEr_Fil3.JPG }} \n"
        . "{{ with_spaces.jpeg }} and {{ this_is_not_an_image_so }} don't replace me \n"
        . "{{ demonstrating spaces in file names.png }}";

$regexp = '/{{\s*(.+?\.(?:jpg|png|gif|jpeg))\s*}}/i';

echo preg_replace_callback($regexp, function($matches) {
    return sprintf('<img src="%s" alt="" />', $matches[1]);
}, $string);

将回显

<img src="image.jpg" alt="" /> or <img src="any-othEr_Fil3.JPG" alt="" /> 
<img src="with_spaces.jpeg" alt="" /> and {{ this_is_not_an_image_so }} don't replace me 
<img src="demonstrating spaces in file names.png" alt="" />

更多资源

PHP preg_replace_callback documentation

The site I use to test and practice regular expressions

答案 2 :(得分:0)

这是在Perl中,但在PHP中应该类似:

从命令行:

echo "{{image.jpg}} {{any-othEr_Fil3.JPG}}" | perl -ne '$_ =~ s/{{([^}]+)}}/&lt;img src="$1" alt="" \/&gt;/g; print $_'