使用preg_replace创建可选的alt img属性

时间:2017-07-05 18:34:32

标签: php regex preg-replace

我正在使用此代码

echo preg_replace('#\{{2}(.*?)\}{2}#', '<img src="/base/$1">', $input);

要显示如下输入:

foo foo {{picture.jpg}} foo

在img html标签中。 我想以这种格式添加一个可选的alt属性:

{{picture.jpg|optional}}

并翻译成:

<img src="/base/$1" alt="$2">

只有它存在,没有创建另一个preg_replace但只改进现有的。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用

{{(.+?)(?:\|([^}]+))?}}

a demo on regex101.com

<小时/> 在PHP的帮助下preg_replace_callback()中的哪一个是:

<?php

$string = <<<DATA
foo foo {{picture.jpg}} foo
{{picture.jpg|optional}}
DATA;

$regex = '~{{(.+?)(?:\|([^}]+))?}}~';

$string = preg_replace_callback($regex, 
    function($match) {
        if (!empty($match[2])) {
            return "<img src='/base/{$match[1]}' alt='{$match[2]}'>";
        } else {
            return "<img src='/base/{$match[1]}'>";
        }
}, $string);

echo $string;

这会产生

foo foo <img src='/base/picture.jpg'> foo
<img src='/base/picture.jpg' alt='optional'>

答案 1 :(得分:0)

由于你只禁止使用另一个preg_replace而不是另一个正则表达式,所以它可以工作:

preg_replace(['#\{{2}(.*?)\|(.*?)\}{2}#', '#\{{2}(.*?)\}{2}#'], ['<img src="/base/$1" alt="$2">', '<img src="/base/$1">'], $input);

工作示例:

function replacer($input) {
    return preg_replace(['#\{{2}(.*?)\|(.*?)\}{2}#', '#\{{2}(.*?)\}{2}#'], ['<img src="/base/$1" alt="$2">', '<img src="/base/$1">'], $input);
}

echo replacer('{{picture.jpg}}');
echo replacer('{{picture.jpg|optional}}');

输出:

<img src="/base/picture.jpg">
<img src="/base/picture.jpg" alt="optional">