プロが教えるわが家の防犯対策術!

お世話になります
phpのpreg_replaceで質問です

下記の様な記述にて文字列の置換をしています
$body = preg_replace("/cid:(\d{2,})@(\d{6}).(\d{6})/","/bl/id/$1/",$text);

コレを改良してcidの次に入る値で処理を分けたいのですが、うまくいきません。
どなたかご教授お願い致します

$arr = array("gif","jpg"."png");
$body = preg_replace("/cid:(\d{2,})@(\d{6}).(\d{6})/","/bl/id/$1/$arr[$1]",$text);

宜しくお願い致します

A 回答 (2件)

具体的に、どういうデータをどういうデータに加工したいか例示した方が


より適切な回答を得られるかと

この回答への補足

回答頂き有り難うございます
例示と致しましては、下記のようになります

$arr = array("gif","jpg"."png");
$body = preg_replace("/cid:(\d{2,})@(\d{6}).(\d{6})/","/bl/id/$1/$arr[$1]",$text);

↓↓↓↓↓↓↓↓↓↓↓

$arr = array("gif","jpg"."png");
$body = preg_replace("/cid:02@123456.123456/","/bl/id/2/jpg",$text);

補足日時:2014/07/30 15:55
    • good
    • 0

>$arr = array("gif","jpg"."png");



「jpg」と「png」を「.」で結合していますが、これは「,」で分離したい?

>cid:(\d{2,})
で得られるものは例示だと「02」に当たる部分ですが
$arr["02"]を参照しても得るものはありませんが、02を数値として読み替えて
$arr[2]を参照したい?

また$arr[2]は「png」だけど、例示だと「jpg」、書き間違い?

$arr[xx]のxxがキーとして存在しない場合、例外処理など放置でよい?

>@(\d{6}).(\d{6})
このままだと「.」は「なにか1文字」にマッチするので「.」という文字ではない
「\.」(より厳密には「\\.」)にしないとまずいです

以上踏まえて、かなり好意的に解釈してこんな感じ?
以前はe修飾子というやり方もありましたが今は非推奨のようなので
コールバックで処理しています

<?PHP
$arr = array("gif","jpg","png");
$text="cid:02@123456.123456";
$pattern="/cid:(\d{2,})@(\d{6})\\.(\d{6})/";
$body=preg_replace_callback($pattern,function ($matches) use ($arr){
$num=(int) $matches[1];
return "/bl/id/".$num."/".$arr[$num];
},$text);
print $body;
?>
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!