人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javascript、phpについて

下記のjavascriptのコードを、phpではどう書けばよいか教えて下さい。
var str2 = str.replace(/(<a.*?<\/a>)|(ここ)/g, function(a,b,c) {return b ? b : '<strong>'+c+'</strong>';}) ;

よろしくお願いします。

●質問者: worldtravel
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● TransFreeBSD
●70ポイント ベストアンサー

修飾子eを使います。置換文字列は後方参照を解決した後、evalされます。
http://ideone.com/7RFQp
http://www.php.net/manual/ja/reference.pcre.pattern.modifiers.php


worldtravelさんのコメント
ありがとうございました。 希望通りに動きました。 追加の条件がありましたので、こちらで改めて質問させて頂きました。 http://q.hatena.ne.jp/1340009813

2 ● y-kawaz
●30ポイント

preg_replace_callbackを使えば良いです。

<?php
$str = "ほげ<a>リンク</a>、ここです。\n";

// php-5.3以上ならクロージャが使えるので以下のように書けます(php-5.3未満だと文法エラー)
$str2 = preg_replace_callback('/(<a.*?<\/a>)|(ここ)/', function($m) {
 return $m[1] ? $m[1] : $m[2];
}, $str);
echo $str2;


// php-5.3未満の場合、その1(関数を作っておき名前で指定)
function func($m) {
 return $m[1] ? $m[1] : $m[2];
}
$str2 = preg_replace_callback('/(<a.*?<\/a>)|(ここ)/', 'func', $str);
echo $str2;


// php-5.3未満の場合、その2(無名関数を利用)
$str2 = preg_replace_callback('/(<a.*?<\/a>)|(ここ)/', create_function('$m', 'return $m[1] ? $m[1] : $m[2];'), $str);
echo $str2;

ただこの例だと、Cherenkovさんのコメントの指摘のように preg_replace('/ここ/', '<strong>$1</strong>', $str) で良いですよね?
まぁ多分、例が悪かっただけで趣旨はコールバック関数での置換方法だと思いますが。


worldtravelさんのコメント
ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ