我正在使用此代码
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但只改进现有的。
我该怎么做?
答案 0 :(得分:1)
您可以使用
{{(.+?)(?:\|([^}]+))?}}
<小时/>
在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">