0

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

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

至:

<img src="image.jpg" alt="" /><img src="any-othEr_Fil3.JPG" alt="" />分别使用 PHP 和正则表达式。

计划是什么?

我一直在尝试,但没有成功。

4

3 回答 3

2

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

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

要替换的字符串:

'<img src="$1" alt="" />'
于 2012-12-12T20:49:58.843 回答
1

快速解决

要匹配介于 the{{和 the之间的字符,}}我们应该使用(.+?). .匹配任何字符(包括空格)的方法。我允许这样做,因为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 文档

我用来测试和练习正则表达式的网站

于 2012-12-12T21:09:21.493 回答
0

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

从命令行:

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