说我需要更换以下任何一项:
{{image.jpg}}
或{{any-othEr_Fil3.JPG}}
要:
分别使用PHP和正则表达式 <img src="image.jpg" alt="" />
或<img src="any-othEr_Fil3.JPG" alt="" />
。
该计划是什么?
我一直在努力,但没有成功。
答案 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="" />
答案 2 :(得分:0)
这是在Perl中,但在PHP中应该类似:
从命令行:
echo "{{image.jpg}} {{any-othEr_Fil3.JPG}}" | perl -ne '$_ =~ s/{{([^}]+)}}/<img src="$1" alt="" \/>/g; print $_'