javascript、phpについて


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

よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/06/18 17:58:13
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:TransFreeBSD No.1

回答回数668ベストアンサー獲得回数268

ポイント70pt

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

id:worldtravel

ありがとうございました。
希望通りに動きました。

追加の条件がありましたので、こちらで改めて質問させて頂きました。
http://q.hatena.ne.jp/1340009813

2012/06/18 17:57:45

その他の回答1件)

id:TransFreeBSD No.1

回答回数668ベストアンサー獲得回数268ここでベストアンサー

ポイント70pt

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

id:worldtravel

ありがとうございました。
希望通りに動きました。

追加の条件がありましたので、こちらで改めて質問させて頂きました。
http://q.hatena.ne.jp/1340009813

2012/06/18 17:57:45
id:y-kawaz No.2

回答回数1422ベストアンサー獲得回数226

ポイント30pt

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) で良いですよね?
まぁ多分、例が悪かっただけで趣旨はコールバック関数での置換方法だと思いますが。

id:worldtravel

ありがとうございました。

2012/06/18 17:57:52
  • id:Cherenkov
    str変数はどんな感じですか?
    正規表現は/(ここ)/gだけでいいように見えるのですが。
  • id:TransFreeBSD
    <a>ここ</a>の場合にstrongを付けたくないのだと思います。
  • id:y-kawaz
    なるほど!
  • id:worldtravel
    すみません。
    以前ここでjavascriptを教えて頂きました。
    http://q.hatena.ne.jp/1266999992

    TransFreeBSDさんの仰るとおり、aタグに囲まれた範囲内は置き換えたくないのです。

    それと、今更ながら気が付いたのですが、imgタグのalt属性の値も置き換わると困ります。

    質問に付け足しで申し訳ございませんが上手い方法を教えて下さい。

    実際はaタグのリンクに変更したいのです。
    var str2 = str.replace(/(<a.*?<\/a>)|(ここ)/g, function(a,b,c) {return b ? b : '<a href="xxx">'+c+'</a>';}) ;

    お願い致します。
  • id:worldtravel
    すみません。

    改めて質問し直させて頂きました。
    http://q.hatena.ne.jp/1340009813

    ぜひ、こちらにご回答下さい。
    よろしくお願いします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません