次のいずれかを置き換える必要があるとします。
{{image.jpg}}
また{{any-othEr_Fil3.JPG}}
に:
<img src="image.jpg" alt="" />
または、<img src="any-othEr_Fil3.JPG" alt="" />
それぞれPHPと正規表現を使用します。
スキームは何でしょうか?
私は試みてきましたが、失敗しました。
一致する正規表現(ファイル名に文字が含まれていないと仮定します}
-含まれている場合は、それをエスケープするスキームが必要ですが、提供された情報からはわかりません):
/{{([^}]*)}}/
置き換える文字列:
'<img src="$1" alt="" />'
との間の文字を一致させるには{{
、}}
を使用する必要があります(.+?)
。.
空白を含む任意の文字に一致する手段。は有効なファイル名であるため、これを許可しました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="" />
regexpは、中括弧とファイル名の間にスペースを入れて/{{\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="" />
これはPerlですが、PHPでも同様である必要があります。
コマンドラインから:
echo "{{image.jpg}} {{any-othEr_Fil3.JPG}}" | perl -ne '$_ =~ s/{{([^}]+)}}/<img src="$1" alt="" \/>/g; print $_'